今天使用 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等对象在一场逻辑时无法释放。
解决方式就是不使用异常。把错误信息通过输出参数或者返回值的方式传递到调用者。
相关推荐
1. **使用异常处理**:在代码中使用`@try`、`@catch`、`@finally`来捕获并处理可能出现的异常。在Swift中,可以使用`do`、`catch`语句进行错误处理。 2. **内存管理优化**:遵循ARC(Automatic Reference Counting)...
1. **Objective-C与Swift基础**:面试通常会从这两种iOS主要编程语言的基础开始,包括语法特性、内存管理(Objective-C中的retain count和Swift的ARC)、类型系统以及面向对象编程概念。 2. **UIKit框架**:作为iOS...
使用ARC(Automatic Reference Counting)可以自动管理内存,但依然需要注意强引用循环等问题。 8. **线程安全(Thread Safety)**:多线程环境下,确保代码的线程安全至关重要。同步、锁、GCD等工具可以帮助解决线程...
2. **内存管理**:iOS中的内存管理主要依赖于ARC(Automatic Reference Counting),但仍然需要注意内存泄漏和循环引用。使用Instruments工具中的Leaks和Object Allocation模板可以检测内存问题。确保每次对象不再...
笔记会阐述块的定义、类型和使用,以及如何在GCD(Grand Central Dispatch)中使用块。 7. **集合类**:OC提供了NSArray、NSMutableArray、NSDictionary、NSMutableDictionary等集合类,笔记会讲解它们的使用方法和...
在本资源中,我们拥有两个iOS应用的源代码——"inG_Calculator"的版本1.53。这个压缩包对于iOS开发者来说是一个宝贵的参考资料,尤其是那些正在学习或想要深入理解计算器应用开发的人员。下面我们将详细探讨iOS应用...
在iOS应用中,通常使用NSURLSession或者第三方库如Alamofire进行网络数据的获取。源码中可能会有URLSession的相关配置,包括请求头的设置、网络状态的监听、数据的序列化与反序列化等。如果涉及到JSON数据交换,还...
1. **Objective-C与Swift对比**:面试中常会询问你对这两种iOS主要编程语言的理解,包括它们的语法特性、类和协议的使用、内存管理(如ARC)以及各自的优势和应用场景。 2. **MVC模式**:作为iOS开发的基础设计模式...
然而,与Java或C++等其他语言不同,iOS开发者通常不鼓励在生产环境中广泛使用异常处理,因为Apple的性能优化倾向于避免异常作为常规控制流的一部分。 一个常见的处理策略是使用`UncaughtExceptionHandler`。这是一...
本章的内容可能涵盖Xcode 4及针对iOS 4.3的开发环境,这是当时广泛使用的开发工具和平台。 在第11章中,我们可能会学到以下几个核心知识点: 1. **用户界面设计**:iOS应用的核心在于提供直观易用的用户体验。本章...
源码可能包含了错误处理代码,如try-catch blocks或NSException捕获,以及使用NSError对象来向用户反馈问题。 这个源码库可能还包含了对其他技术的运用,如AutoLayout进行屏幕适配,或者使用Swift或Objective-C的...
在《iOS与OS X代码的52个有效方法》这本书中,作者Matt Galloway为我们提供了52种具体的技巧来提高iOS和OS X应用程序的质量。无论是对于初学者还是经验丰富的开发者而言,这些方法都能提供宝贵的指导。 #### 二、...
本文将围绕标题和描述中的“awesome-ios-interview”项目,详细阐述iOS开发人员在面试中可能会遇到的关键知识点。 1. **Swift语言基础** - 类型系统:Swift具有强类型、静态类型等特点,理解变量、常量、枚举、...
- **内存管理**:JSONKit返回的解析结果是autorelease的对象,因此需要考虑内存管理规则,特别是在ARC(Automatic Reference Counting)环境中。 - **版本兼容性**:JSONKit可能不适用于最新版本的iOS和Xcode,因为...
7. **错误处理**:学习如何使用NSException和NSError进行错误处理,以便在出现问题时能够优雅地恢复或向用户反馈。 8. **性能优化**:处理实时的AR数据可能会对性能造成压力,了解如何优化代码,减少不必要的计算,...
10. **异常处理**:Objective-C中的错误处理模型,包括何时抛出异常,如何捕获并处理异常,以及使用NSException类的相关知识。 11. **测试与调试**:介绍如何使用Xcode进行单元测试和集成测试,以及如何调试...
书中的章节可能会涵盖NSException的使用,以及Xcode调试工具的运用,以便开发者能够找出并修复程序中的问题。 此外,书中还会涉及Objective-C的现代特性,如 blocks 和 GCD(Grand Central Dispatch),这些都是多...
- **异常处理**:使用 NSException 和 try-catch-finally 结构处理错误。 - **性能优化**:探讨提高应用程序性能的方法和技术。 **7. 实战项目** - **项目案例**:书中包含了一系列实战项目,帮助读者将理论知识...
在2014年Swift出现之前,Objective-C一直是苹果生态系统的首选语言,因此很多现有的iOS应用,包括YesEquality,都是使用Objective-C编写的。 开发YesEquality时,开发者可能面临了一系列挑战,比如如何创建用户友好...
在iOS和macOS应用开发中,Objective-C是主要的编程工具。`objc4-779.zip`是一个包含了Objective-C运行时库objc4的源码版本,它是我们深入理解Objective-C底层机制的重要资源。 首先,我们来了解一下Objective-C的...