05setter与getter方法

setter/getter方法 与 @proterty
(一)点语法的本质
点语法的本质是方法的调用,当使用点语法时,编译器会自动将其转化为setter/getter方法,如果没有setter和getter方法,就不能使用点语法.

(二)点语法使用时的注意事项
以下这种方式是一个死循环:
(1)在setter方法中,self.weight = weight; 相当于[self setWeight:weight];
(2)在getter方法中,return self.weight ; 相当于[self weight];

(三)@property 与 @synthesize关键字的作用
(1)@property 关键字
@property 关键字 可以自动生成某个实例变量(成员变量)的setter和getter方法的声明.
例:

@property  float  weight;

编译时遇到这行代码,会自动扩展为以下两句:

 -(void)setWeight:(float)weight;
 -(float)weight;

(2)@synthesize 关键字
@synthesize 关键字 可以自动生成某个实例变量(成员变量)的setter和getter方法的实现.
例:

@synthesize  weight = _weight;
 //左边的weight    代表实现@property  float  weight
 //右边的_weight   代表_weight这个实例变量 

编译时遇到这行代码,会自动扩展为以下代码:

 - (void)setWeight:(float)weight
 {
   _weight = weight; 
 }

 - (float)weight
 { 
   return   _weight;
 }

(四)关键字使用时的注意事项
(1)从Xcode4.4之后,@property关键字独揽了三个功能,这三个功能分别是:
1)生成_weight实例变量的get和set方法的声明;2)生成_weight实例变量set和get方法的实现;3)生成一个_weight的实例变量。
相当于独揽了@property和@synthesize的功能.

2)重写setter/getter方法(手写实现):
1)如果手动实现了set方法,那么编译器就只生成get方法和实例变量;
2)如果手动实现了get方法,那么编译器就只生成set方法和实例变量;
3)如果set和get方法都是手动实现的,那么编译器将不会生成实例变量。

(五)nonatomic 与 atomic(了解)
(1)nonatomic 与 atomic用来决定编译器生成的setter和getter方法是否为原子操作.
(2)atomic:是一种线程保护技术,提供线程安全.是为了防止在写未完成的时候,就被另外一个线程读取,从而造成数据的错误.但是这种机制耗费系统资源.
nonatomic:如果对象不用考虑多线程的情况,那么就可以使用nonatomic,可以提高执行效率.
(3)在多线程环境下,原子操作是必要的,否则可能引起错误的结果.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容