@property支持参数功能,使用方法为 @property (参数1, 参数2, ...) 数据类型 名称。
1、set方法内存管理相关的参数
(1)assign:直接赋值(默认,适用于非OC对象类型或手动内存管理时循环引用的一方)
(2)手动内存管理(copy其实是建立了一个相同的对象,而retain只是保存其对象,并且其计数值+1。)
retain:release旧值,retain新值(适用于OC对象类型)
copy:release旧值,copy新值
(3)自动内存管理
strong:强指针引用
weak:弱指针引用( 一般用于自动内存管理循环引用的一方)
[objc] view plaincopy
@property(assign) int age;
@property(retain) School *school;
[objc] view plaincopy
- (void) setAge:(int) age
{
_age = age;
}
- (int) age
{
return _age;
}
- (void) setSchool:(School *) school
{
if(_school != school)
{
[_school release];
_school = [school retain];
}
}
- (School *) school
{
return _school;
}
2、是否要生成set方法
(1)readwrite:同时生成setter和getter的声明、实现(默认)
(2)readonly:只会生成getter的声明、实现
3、多线程管理
(1)nonatomic:线程不安全,性能高 (一般就用这个)
(2)atomic :线程安全,性能低(默认)
4、setter和getter方法的名称
(1)setter : 决定了set方法的名称(一定要有个冒号 :)
(2)getter : 决定了get方法的名称(一般用在BOOL类型)
[objc] view plaincopy
@property(setter=abc,getter=cba) int age;
[objc] view plaincopy
test.abc = 10;
test.age = 10;
// 以上两句作用相同
int age = test.cba;
int age = test.age;
// 以上两句作用相同
|