`
ak478288
  • 浏览: 72670 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

 

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

 

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

分享到:
评论

相关推荐

    IOS开发中的各种Category

    NSException NSFileManager NSObject NSSet NSString NSTimer NSURL UIKit UIBezierPath UIButton UIColor UIDevice UIImage UIImageView UILable UINavigationController UIResponder UIScrollView UISearchBar ...

    ios Crash异常捕捉demo

    主要用于NSException 异常的捕捉,可以捕获对应的异常。

    ios 录音文件caf转mp3

    ios录音的caf文件转MP3文件,以兼容android 注意音频参数的设置,如果声音异常,请调整参数。 code: AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; [session ...

    KSCrash:终极iOS崩溃报告器

    在僵尸或内存损坏的情况下恢复丢失的NSException消息。 内省寄存器和堆栈中的对象(C字符串和Objective-C对象,包括ivars)。 提取有关异常引用的对象的信息(例如“发送到实例0xa26d9a0的无法识别的选择

    Catfish:[已弃用] Catfish 是一组对 iOS 开发人员有用的库和类别,使开发移动应用程序更容易

    鲶鱼它是一个开源项目,包含一组用于 iOS 平台的库,用 Objective-C 编写。 它的目标是帮助程序员拥有大多数项目中日常所... 如果您在项目中使用 Catfish,归因会很好。吉祥物执照版权所有 :copyright: 2013 Jairo Bar

    NSExceptionSwift

    一个很小的库,可让您直接在Swift代码中捕获Objective-C NSException。 一体化 可可豆 您可以使用安装NSExceptionSwift将其添加到您的Podfile : platform :ios , '8.0' use_frameworks! target 'MyApp' do pod '...

    SDStatisticsSDK

    主要分为以下两种场景: NSException异常Unix信号异常捕获NSException异常通过NSSetUncaughtExceptionHandler函数来设置异常处理函数,然后收集异常变量信息捕获信号Mach异常和Unix信号在iOS系统中,每个踩,任务,...

Global site tag (gtag.js) - Google Analytics