objective-c 编程总结(第三篇)内存管理
2012-03-13 10:32
267 查看
oc中内存管理的三项原则:
1. 谁创建(new 或者 alloc),谁release。
2. 如果你从一个方法中获得一个对象,应该假设这个对象的retaincount是1,而且已经被设置为autorelease,你不需要,也不应该release它。如果需要进一步传递这个对象,你可以进行retain或者copy操作。
3. 如果你retain了一个对象,你必须负责release它。
另外再补充一下。仔细查阅了release方法的定义,它被定义为oneway。这个关键字的意思是方法的调用不需要返回任何消息,方法的返回也不保证方法已经执行完毕。也就是说,当你调用了[obj release]之后,retainCount不一定会立即做出反应。所以retainCount是不可靠的,除非你愿意sleep一段时间来等待release完成。
再一点,对于类的属性,如果通过@property(retain)定义,最好在释放的时候,同时做两件事,1,release它,2,通过setter设置其为nil。以避免这个指针指向内存的随意位置,造成混乱。
要补充的第三点,就是在使用类似工厂方法返回一个创建的对象时,一定要以以下方式返回对象:
return [product autorelease];
1. 谁创建(new 或者 alloc),谁release。
2. 如果你从一个方法中获得一个对象,应该假设这个对象的retaincount是1,而且已经被设置为autorelease,你不需要,也不应该release它。如果需要进一步传递这个对象,你可以进行retain或者copy操作。
3. 如果你retain了一个对象,你必须负责release它。
另外再补充一下。仔细查阅了release方法的定义,它被定义为oneway。这个关键字的意思是方法的调用不需要返回任何消息,方法的返回也不保证方法已经执行完毕。也就是说,当你调用了[obj release]之后,retainCount不一定会立即做出反应。所以retainCount是不可靠的,除非你愿意sleep一段时间来等待release完成。
再一点,对于类的属性,如果通过@property(retain)定义,最好在释放的时候,同时做两件事,1,release它,2,通过setter设置其为nil。以避免这个指针指向内存的随意位置,造成混乱。
要补充的第三点,就是在使用类似工厂方法返回一个创建的对象时,一定要以以下方式返回对象:
return [product autorelease];
相关文章推荐
- objective-c 编程总结 内存管理
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- Objective-C和Core Foundation 对象相互转换的内存管理总结
- 内存管理原理----《Objective-C高级编程:iOS与OS X多线程和内存管理》读书笔记
- 《Objective-C高级编程:iOS与OS X多线程和内存管理》读后感
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- Objective-C内存管理总结〜CC专版
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记三
- objective-C 编程全解-第05章 基于引用计数的内存管理 上
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(三) Block语法
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- objective-c 编程总结(第十篇)并行开发与线程管理
- Objective-c内存管理学习总结
- Objective-C内存管理知识总结
- Objective-C内存管理总结
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记二
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- Objective-C 内存管理的几点总结
- objective-c 编程总结(第四篇)日期型类型操作