一. 原理
对于任何继承了NSObject的对象,都有一个与之关联的整形变量,称为引用计数器;只有计数器的值为0的时候,OC就回收该对象,否则永不回收。
1. 创建对象时,如使用alloc ,new , copy,引用计数器的值为1
2. 当使用release方法释放时,计数器的值减1
3. 当使用retain方法时,计数器的值加1
4. 当对象被回收时候,自动调用对象的dealloc方法,
5. 使用retainCount方法来获取引用计数器的值
二. 防止内存泄露标准示例写法:
- @class Book;
- @interface Student : NSObject
- @property Book *book;
- @end
- #include "Book.h"
- @implementation Student
- //该写法能完美防止内存泄露
- - (void)setBook:(Book *)book{
- if(_book!=book){
- [_book release];
- _book = [book retain];
- }
- }
- - (Book *)book{
- return _book;
- }
- - (void)dealloc{
- [_book release];//释放_book对象
- [super dealloc];
- }
- @end
以上对于内存泄露的处理,可直接用@property参数retain关键字简写为:
- @class Book;
- @interface Student : NSObject
- @property (retain) Book *book;//OC会在set方法中作以上检查
- @end
时间: 2024-12-22 01:42:29