如果你有个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开头))