您的位置:首页 > 移动开发 > Objective-C

Objective-C 基础知识之 (十七):内存管理原则二

2015-09-25 20:15 465 查看
内存管理

原则:
1、在一段代码内,对象的引用计数增加和减少要保证平衡。
2、凡是调用了retain、alloc、copy造成引用计数增加,当不再需要使用这个对象时,要调用release或autorelease相应的减少引用计数。
3、便利构造器方法内部要调用autorelease方法避免内存泄露。
4、使用便利构造器方法创建的对象,不需要调用release方法,否则会造成过度释放。
5、当对象的引用计数减为0时,对象会自动调用dealloc,不能手动调用。
6、在MRC下,实现dealloc方法时,最后一句代码[super dealloc]。
7、当对象的实例变量引用对象时,如果造成引用计数增加,需要在对象的dealloc方法中相应的减少引用计数。
8、集合对象会自动管理添加的对象。集合对象造成被添加对象的引用计数变化,不归我们处理。
9、谁造成引用计数增加,谁相应的减少引用计数。

10、对象类型的属性(除了delegate)都是用retain或copy修饰,如果使用assgin修饰会造成野指针(对象的实例变量是野指针)。

相关方法的内存实现:

- (void)setGender:(NSString*)gender
{
if (_gender != gender) {

[_gender release];

_gender = [gender retain];
}
}

-(void)setAddress:(NSString *)address
{
if (_address != address) {

[_address release];

_address = [address copy];
}
}

-(instancetype)initWithGender:(NSString *)gender
{
self = [super init];
if (self) {

_gender = gender;
}
return self;
}

+(instancetype)personWithGender:(NSString *)gender
{
Person * p = [[Person alloc]initWithGender:gender];

// 当管理这个对象的自动释放池销毁时,这个对象的引用计数减1.
// 自动释放池可能是系统创建的,可能是我们创建的。
return [p autorelease];
}

- (void)dealloc
{
// _gender、_address在指向外部传入的字符串对象时,都造成了对象的引用计数增加
[_gender release];
[_address release];

[super dealloc];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: