黑马程序员技术交流社区

标题: OC中的@property参数 [打印本页]

作者: itheimaXYP    时间: 2014-8-19 19:38
标题: OC中的@property参数
@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;  
// 以上两句作用相同  





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2