OC点语法介绍和使用以及@property关键字

使用"点语法"

Person *p =[Person new];

//点语法
//对象.属性名
//注意,此时 (p.age)并不是直接方法实例对象
//而是xcode可能到点语法(p.age)后,会帮我们自动替换
//p.age --替换--->[p setAge:18]
p.age=18;

//注意.此处 p.age出现在了等号的右侧
//设计上,当xcode 看到了p.age出行在等号的右侧后
//它会帮我们把p.age---替换成--->[p age];
int a= p.age;
NSString *s =[p name];

  

@property

@property是编译器的指令
编译器指令: 就是告诉编译器要作什么
@property 告诉编译器  声明属性的访问器(getter/setter)方法

好处:免去我们手工书写get和set方法繁琐的代码

  

@property用法

格式:
@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;

 

  

posted @ 2015-05-13 14:46  王世桢  阅读(237)  评论(0编辑  收藏  举报