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;