内存管理原则

1.原则分析

只要还有人在使用某个对象,那么这个对象就不会被回收
只要你想用这个对象,就让对象的计数器+1
当你不再使用这个对象时,就让对象的计数器+1
 
2. 谁创建,谁release
如果你通过alloc 、new 或[mutable]copy 来创建一个对象,那么你必须调用 release或autorelease
换句话说,不是你创建的,就不用你去[auto]release
 
3.谁retain,谁release
只要你调用了retain,无论这个对象是如何生成,你都要调用release
 
4.总结
有始有终,有加就有减
曾经让对象的计数器+1, 就必须在最后让对象计数器-1
 
set方法的内存管理
 
如果你有个OC对象类型的成员变量,就必须管理这个成员变量的内存。
比如有个Book*_book
 
1.set方法的实现
- (void)setBook:(Book *)book
{
if (_book != book)
[_book release];
_book = [book retain];
}
}
 
2. dealloc方法的实现 (不要直接调用dealloc)
 
- (void)dealloc
{
[_book release];
[super dealloc];
}
 
3.@property参数
1> OC对象类型
@property (nonatomic,retain) 类名 *属性名;
@property (nonatomic,retain) Car *car;
@property (nonatomic,retain) id car;
 
2> 非OC对象类型 (int\folat\enum\struct)
@property (nonatomic,assign) 类型名称 属性名;
@property (nonatomic,assign) int age;
 
4.autorelease
 
1>系统自带的方法中,如果不包含alloc、new、copy,那么这些方法返回的对象都是已经autorelease过的
[NSString stringWithFormat:…..];
[NSdate date];
 
2>开发中经常写一些类方法快速创建一个autorelease的对象
*创建对象的时候不要直接使用类名,用self
 
其他相关
 
1.set方法内存管理相关的参数
*retain:release旧值,retain新值(适用于OC对象类型)
*assign:直接赋值(默认,适用于非0C对象类型)
*copy   :release旧值,copy新值
 
2.是否要生成set方法
*readwrite:同时生成setter和getter的声明、实现
*readonly:只会生成getter的声明、实现
 
3.多线程管理
*nonatomic:性能高(一般就用这个)
*atomic:性能低(默认)
 
4.setter和getter方法的名称
*setter:决定了set方法的名称,一定要有个冒号 : 
*getter:决定了get方法的名称(一般用在BOOL类型(返回BOOL类型的方法名一般以is开头))

 

posted on 2016-03-06 17:53  _MR.Q  阅读(194)  评论(0编辑  收藏  举报

导航