十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
@property
创新互联建站是专业的新兴网站建设公司,新兴接单;提供成都网站建设、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行新兴网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!@property是编译器的指令 编译器指令: 就是告诉编译器要作什么 @property 告诉编译器 声明属性的访问器(getter/setter)方法 好处:免去我们手工书写get和set方法繁琐的代码@property用法
格式:用法:
1 1.在xcode4.4 之前,用于帮我们实现get/set方法的声明
2 2.在xcode 4.4之后,有稍微增强
使用注意:
1 1.@property只能写在@interface @end中
2 2.@property 用来自动生成成员变量的 get/set方法声明(xcode4.4 以前)
3 告诉property要生成的get/set 方法声明的成员变量类型是什么
4 告诉property要生成的get/set 方法是哪个属性的,属性名称去掉下划线
5
6 如果写成了 @property int _age;
7 Person *p =[Person new];
8 p.age 就拿不到了
9 p._age;
10
@property 增强使用
1 Xcode4.4版本以后支持的
2 只使用 @property进行声明,类会自动帮你实现
3 操作的是带有下划线的实例变量
4
5 如果没有手动声明成员变量,property会在.m文件中自动帮我们生成一个_开头的成员变量
6
7 注意; 这个实例的生成与.m文件 是私有不能被子类使用的
8 get和set方法在.m中可以自己手动实现,但是当用增强时,get 、set只能手动实现一个
@property参数
1 格式:
2 @property(参数1,参数2) 数据类型 方法名
3 参数类型 参数 说明
4 原子性 atomic 对属性加锁,多线程下线程安全,默认值
5 nonatomic 对属性不加锁,多线程下不安全,但是速度块
6 读写属性 readwrite 生成getter、setter ,默认值
7 readonly 只生成getter方法
8 方法处理 assign 直接赋值,默认值
9 retain 先release原来的值,再retain新增
10 copy 先release原来的值,再copy新增
11
12
13 @property(assign) int age;
14 int _age;
15 -(void)setAge:(int)age{
16 _age = age;
17 }
18
19 @property (retain) Car * car;
20 Car _car;
21 -(void)setCar:(Car)car{
22 if(_car!=car){
23 [_car release];
24 _car =[car retain];
25 }
26 }
27
28 1)内存管理相关参数
29 retain:对对象release旧值,retain新值 (适用于OC对象类型)
30 assign:直接赋值(默认,适用于非oc对象类型);
31 copy : release旧值,copy新值
32
33 @property ( nonatomic,assign) Car *car;
34
35 例如:在color的get set方法中修改age的值
36 @property(nonatomic,setter=setColor:,getter=color) int age;