---------------------------------------- android培训、java培训、期待与您交流! ----------------------------------
PS:上一篇博客详细讲了OC 内存管理的细节,但是以前的内存管理都用很多重复的垃圾代码,使用@property的retain参数,即可省略set方法里面手动对对象的计数器操作。
一、property参数说明(需要熟记掌握)
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高 (一般就用这个);禁止多线程,变量保护,提高性能
* atomic : 性能低(默认)
4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)
eg:代码示例
@interface Person : NSObject
// 返回BOOL类型的方法名一般以is开头,把默认的get方法(rich)改成isRich,但成员变量还是不变,还是_rich
@property (getter = isRich) BOOL rich;
//参数属性:高性能,int数据类型成员变量,可读可写
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight
// 参数属性:低性能(默认atomic),可读可写,int数据类型成员变量
@property (readwrite, assign) int height;
// 参数属性:高性能,int数据类型成员变量
@property (nonatomic, assign) int age;
// 参数属性:字符串对象成员变量,需要进行内存管理
@property (retain) NSString *name;@end
二、补充@property配合@synthesize的用法
@property int age;
等效于在头文件中声明2个方法:
- (int)count;
-(void)setCount:(int)newCount;
2、实现文件(.m)中
@synthesize count;
等效于在实现文件(.m)中实现2个方法。
- (int)count
{
return count;
}
-(void)setCount:(int)newCount
{
count = newCount;
}
PS:以上等效的函数部分由编译器自动帮开发者填充完成,简化了编码输入工作量。
-------------------------------------- android培训、java培训、期待与您交流! ------------------------------------