论坛首页 移动开发技术论坛

iOS中 在ARC环境下使用NSException要注意的问题

浏览 1885 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-04-02  

 

今天使用 Instruments 对程序进行调试,发现了n多memory leak。原以为使用了 ARC 就不用担心内存泄漏了,发现这个东西在结合Exception使用的场景下,会有问题,编译器无法识别释放位置,导致溢出。看了官方文档没找到对这个场景介绍。偶然间发现正常逻辑和异常逻辑运行后,leak差异很大,于是就突然想到了异常的影响。

例如:

HKCTClient* client;
    NSString* restaurant_pass;
    NSMutableDictionary* dic;
    restaurant_pass = [EncUtil encodeDESToHex:DES_KEY value:password];
    client = [[HKCTClient alloc] init];
    client.baseUrl = API_BASE_URL;
    client.subUrl = @"restaurant/login";
    client.secretKey=@"";
    client.restaurantId = restaurantId;
    [client addString:restaurant_pass forKey:@"restaurant_pass"];
    [client doGet];
    dic = [client getResult];
    NSDictionary* infoDic = [dic valueForKey:@"info"];
    HKCTRestaurant* o = [HKCTRestaurant buildFromJsonDic:infoDic];
    if (o) {
        [self setSecretKey:o.password];
    }
    return o;

 其中红色的句子会抛出异常,但是编译器无法识别,于是ARC的方式,就无法知道该如何进行变量的release工作。因此导致client等对象在一场逻辑时无法释放。

 

解决方式就是不使用异常。把错误信息通过输出参数或者返回值的方式传递到调用者。

论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics