OC @property ,@synthesize和点语法的使用

 
@property基本用法
->作用:在@interface自动生成getter和setter方法的声明
->使用格式:
@property 数据类型 名称
->作用流程
在编译器编译的时候.会根据这个@property自动的生成getter setter方法的声明.
->使用注意:
1). @property的类型要和属性的类型一致.
2). @property的名称要和属性的名称一致(只是去掉下划线)
3). @property可以批量声明.
当@property的类型相同的时候,可以批量声明.
4). @property只是生成getter setter的声明.
->例:
@synthesize用法
->作用:在@implementation自动生成getter和setter方法的实现
->使用格式:
@synthesize 名称
注意,这个名称必须要是在@interface中的@property声明的名称
->作用流程:
 1).先生成1个真私有属性,类型和名称与@synthesize声明的类型一致
2).自动生成setter的方法实现
3).自动生成getter的方法实现
->例:
注:若不想生成私有属性,则用 @synthesize 去_名称 = 名称;类型不同也可批量实现
 
 
@property增强用法
->来源:
Xcode4.4之后@property被增强,会自动生成带_的真私有属性,并自动生成该属性的setter和getter声明和实现,以后除了特殊情况就没必要再特别写属性,setter和getter方法了.
->使用注意:
 1). @property的类型要和需要生成的属性的类型一致且名称要和想要生成的属性的名称一致.去掉下划线.
 2). @property也是可以批量声明的. 前提是型相同的情况下.
3). @property生成的方法实现是没有任何逻辑验证的.如果你有逻辑验证,可以自己重写.如果你只重写了setter方法或者getter方法,@property仍然会自动生成私有属性另一个方法.当你同时重写了getter setter,那么@property就不会自动生成私有属性了.
->例:
 
@property带参数用法
1) 语法: @property(参数1,参数2,参数3.....)数据类型 名称;
2)和多线程相关的参数
atomic:默认值,对属性加锁,多线程下保证线程安全
nonatomic:对属性不加锁,多线程下不安全,但速度快
2)与生成的setter方法实现相关参数(具体详见内存管理)
assign:默认值,在MRC和ARC模式下都可使用,在生成的setter方法中直接赋值.当属性类型为非OC对象时一律使用assign,在MRC模式下出现循环引用时,一边使用strong,一边使用assign
retain:只能在MRC模式下使用,当属性类型是OC对象时,在生成的setter方法中使用标准的MRC内存管理代码
strong:只能在ARC模式下使用,当属性类型是OC对象时,绝大多数场景下使用strong
weak:当在ARC模式下出现循环引用则一边使用strong,另一边使用weak;
3)判断是否生成只读或读写的封装参数
readwrite:默认值,同时生成getter和setter方法
readonly:只生成getter方法
4)指定生成的getter,setter方法名称
例如getter = 所指定的方法名
注:以上2)~4)的参数同一组只能使用1个
 
点语法
->作用:快速调用对象的setter/getter方法
->原理:点语法是一个编译器特性,编译器在编译的时候其实就已经把点语法转换为调用getter/setter方法的代码.
如果是通过点语法赋值,就转换为调用setter方法的代码;如果通过点语法取值,那么久转换为调用getter方法的代码.
->语法:
为属性赋值: 对象名.去掉下划线的属性名 = 数据
要取出属性的值: 对象名.去掉下划线的属性名
->使用注意:
1) 只有为对象声明和定义了规范的setter/getter方法才能使用点语法来调用
2) 在getter和setter方法中慎用点语法,防止出现死循环.

你可能感兴趣的:(OC @property ,@synthesize和点语法的使用)