`
ak478288
  • 浏览: 73374 次
  • 性别: 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 app的闪退异常的处理

    1. **使用异常处理**:在代码中使用`@try`、`@catch`、`@finally`来捕获并处理可能出现的异常。在Swift中,可以使用`do`、`catch`语句进行错误处理。 2. **内存管理优化**:遵循ARC(Automatic Reference Counting)...

    考试类精品--常见iOS面试中考察的知识点整理.zip

    1. **Objective-C与Swift基础**:面试通常会从这两种iOS主要编程语言的基础开始,包括语法特性、内存管理(Objective-C中的retain count和Swift的ARC)、类型系统以及面向对象编程概念。 2. **UIKit框架**:作为iOS...

    iOS防崩溃及闪退demo

    使用ARC(Automatic Reference Counting)可以自动管理内存,但依然需要注意强引用循环等问题。 8. **线程安全(Thread Safety)**:多线程环境下,确保代码的线程安全至关重要。同步、锁、GCD等工具可以帮助解决线程...

    IOS Crash的通用解决方法

    2. **内存管理**:iOS中的内存管理主要依赖于ARC(Automatic Reference Counting),但仍然需要注意内存泄漏和循环引用。使用Instruments工具中的Leaks和Object Allocation模板可以检测内存问题。确保每次对象不再...

    iOS史上最全的OC笔记

    笔记会阐述块的定义、类型和使用,以及如何在GCD(Grand Central Dispatch)中使用块。 7. **集合类**:OC提供了NSArray、NSMutableArray、NSDictionary、NSMutableDictionary等集合类,笔记会讲解它们的使用方法和...

    IOS应用源码——两个计算器的源代码 inG_Calculator_1.53.zip

    在本资源中,我们拥有两个iOS应用的源代码——"inG_Calculator"的版本1.53。这个压缩包对于iOS开发者来说是一个宝贵的参考资料,尤其是那些正在学习或想要深入理解计算器应用开发的人员。下面我们将详细探讨iOS应用...

    IOS应用源码——WebsiteNavigation2.rar

    在iOS应用中,通常使用NSURLSession或者第三方库如Alamofire进行网络数据的获取。源码中可能会有URLSession的相关配置,包括请求头的设置、网络状态的监听、数据的序列化与反序列化等。如果涉及到JSON数据交换,还...

    iOS开发面试题

    1. **Objective-C与Swift对比**:面试中常会询问你对这两种iOS主要编程语言的理解,包括它们的语法特性、类和协议的使用、内存管理(如ARC)以及各自的优势和应用场景。 2. **MVC模式**:作为iOS开发的基础设计模式...

    CrashCatched.zip

    然而,与Java或C++等其他语言不同,iOS开发者通常不鼓励在生产环境中广泛使用异常处理,因为Apple的性能优化倾向于避免异常作为常规控制流的一部分。 一个常见的处理策略是使用`UncaughtExceptionHandler`。这是一...

    深入浅出iphone编程 (headfirst iphone development)11 chapter

    本章的内容可能涵盖Xcode 4及针对iOS 4.3的开发环境,这是当时广泛使用的开发工具和平台。 在第11章中,我们可能会学到以下几个核心知识点: 1. **用户界面设计**:iOS应用的核心在于提供直观易用的用户体验。本章...

    IOS应用源码——视频音频控制器.zip

    源码可能包含了错误处理代码,如try-catch blocks或NSException捕获,以及使用NSError对象来向用户反馈问题。 这个源码库可能还包含了对其他技术的运用,如AutoLayout进行屏幕适配,或者使用Swift或Objective-C的...

    iOS与OS X代码的52个有效方法

    在《iOS与OS X代码的52个有效方法》这本书中,作者Matt Galloway为我们提供了52种具体的技巧来提高iOS和OS X应用程序的质量。无论是对于初学者还是经验丰富的开发者而言,这些方法都能提供宝贵的指导。 #### 二、...

    awesome-ios-interview::mobile_phone_with_arrow:精选的iOS开发人员访谈问答列表,Swift和Objective-C

    本文将围绕标题和描述中的“awesome-ios-interview”项目,详细阐述iOS开发人员在面试中可能会遇到的关键知识点。 1. **Swift语言基础** - 类型系统:Swift具有强类型、静态类型等特点,理解变量、常量、枚举、...

    JSON解析库

    - **内存管理**:JSONKit返回的解析结果是autorelease的对象,因此需要考虑内存管理规则,特别是在ARC(Automatic Reference Counting)环境中。 - **版本兼容性**:JSONKit可能不适用于最新版本的iOS和Xcode,因为...

    ARBodyParsingToolLib.zip

    7. **错误处理**:学习如何使用NSException和NSError进行错误处理,以便在出现问题时能够优雅地恢复或向用户反馈。 8. **性能优化**:处理实时的AR数据可能会对性能造成压力,了解如何优化代码,减少不必要的计算,...

    Addison-Wesley Professional] Programming in Objective-C 6th Edition.zip

    10. **异常处理**:Objective-C中的错误处理模型,包括何时抛出异常,如何捕获并处理异常,以及使用NSException类的相关知识。 11. **测试与调试**:介绍如何使用Xcode进行单元测试和集成测试,以及如何调试...

    Objective-C基础教程(中文版)

    书中的章节可能会涵盖NSException的使用,以及Xcode调试工具的运用,以便开发者能够找出并修复程序中的问题。 此外,书中还会涉及Objective-C的现代特性,如 blocks 和 GCD(Grand Central Dispatch),这些都是多...

    ObjectiveCProgrammingTheBigNerdRanchGuide2ndEdition

    - **异常处理**:使用 NSException 和 try-catch-finally 结构处理错误。 - **性能优化**:探讨提高应用程序性能的方法和技术。 **7. 实战项目** - **项目案例**:书中包含了一系列实战项目,帮助读者将理论知识...

    YesEquality:YesEquality iOS应用

    在2014年Swift出现之前,Objective-C一直是苹果生态系统的首选语言,因此很多现有的iOS应用,包括YesEquality,都是使用Objective-C编写的。 开发YesEquality时,开发者可能面临了一系列挑战,比如如何创建用户友好...

    objc4-779.zip

    在iOS和macOS应用开发中,Objective-C是主要的编程工具。`objc4-779.zip`是一个包含了Objective-C运行时库objc4的源码版本,它是我们深入理解Objective-C底层机制的重要资源。 首先,我们来了解一下Objective-C的...

Global site tag (gtag.js) - Google Analytics