iOS时使用实例变量或getter方法

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)

谢谢!

Jas*_*oco 8

第一个通过getter方法访问ivar.第二个直接访问ivar.由于它是一个简单的,合成的属性,除了第一个进行额外的方法调用之外没有太大区别.但是,如果属性是原子的,或者是动态的,或者getter方法很复杂,那么第一个实际上是原子的,而第二个则不是,第一个实际上会触发任何复杂的逻辑.吸气,而第二个不会.

简单来说,编译器将第一次调用重写为:

[[self name] aMethod]
Run Code Online (Sandbox Code Playgroud)

而第二个电话只是按原样保留.