xge*_*86x 6 properties objective-c accessor ios
我有一个关于使用getter和实例变量的问题.我们来看一个例子吧.
假设我有一个.h文件:
@property (nonatomic,strong) NSString *name
Run Code Online (Sandbox Code Playgroud)
在.m文件中,我以这种方式合成该变量:
@synthesize name = _name;
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:使用之间有什么区别:
[self.name aMethod]
Run Code Online (Sandbox Code Playgroud)
和
[_name aMethod]
Run Code Online (Sandbox Code Playgroud)
谢谢!
第一个通过getter方法访问ivar.第二个直接访问ivar.由于它是一个简单的,合成的属性,除了第一个进行额外的方法调用之外没有太大区别.但是,如果属性是原子的,或者是动态的,或者getter方法很复杂,那么第一个实际上是原子的,而第二个则不是,第一个实际上会触发任何复杂的逻辑.吸气,而第二个不会.
简单来说,编译器将第一次调用重写为:
[[self name] aMethod]
Run Code Online (Sandbox Code Playgroud)
而第二个电话只是按原样保留.
| 归档时间: |
|
| 查看次数: |
1362 次 |
| 最近记录: |