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

本文探讨了在使用ARC和Exception时遇到的内存泄漏问题,指出编译器无法识别异常逻辑下的变量释放位置,导致内存泄漏。提出了解决方案:避免使用异常,通过输出参数或返回值传递错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值