A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itheimaXYP 中级黑马   /  2014-8-19 19:38  /  1139 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

@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;  
// 以上两句作用相同  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马