iOS try-catch memory leak详解
无论多优秀的客户端的工程师,都架不住服务端不经意间给你吐回的异常数据,怎么能够尽量的避免被坑呢?一个可能的方式,在使用数据之前做好类型校验;另一个,在涉及一些可能会越界或者自己不放心的地方,加一下try-catch,不过使用try-catch的时候,有一些注意事项,其中最重要的就是 memory leak。
如何模拟或者检查泄漏?
定义一个最简单的测试类:
@interface TestObject : NSObject
@end
@implementation TestObject
- (void)dealloc{
NSLog(@"TestObject dealloc");
}
@end
随便定义一个VC,构造一个异常出来:
NSException *e = nil;
- (void)test1{
NSString*name =@"exception name";
NSString*reason =@"exception reason";
e = [NSException exceptionWithName:name reason:reason userInfo:nil];
@throw e;
}
- (void)test{
@try {
TestObject *obj = [[TestObject alloc] init];
[self test1];
}
@catch (NSException *exception)
{
}
}
在定义的VC的viewDidLoad中,调用test方法:
[self test];
会发现TestObject的dealloc没有调用,内存泄漏了,所以这种使用姿势,是不行的</