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

1 篇文章 0 订阅

 

今天使用 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等对象在一场逻辑时无法释放。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值