【问题标题】:Accessor invocation in Objective-CObjective-C 中的访问器调用
【发布时间】:2011-12-13 18:41:48
【问题描述】:

有什么区别:

self.ivar;
self->ivar;
ivar;

在目标 C 中访问ivar 的方式。

什么时候调用setter?

【问题讨论】:

标签: objective-c setter accessor


【解决方案1】:

self->ivar 和ivar 直接访问实例变量。没有调用访问器方法。

foo = self.ivar 将调用 [self ivar] 访问器方法(或 @property 的 getter= 方法,如果您这样指定)

self.ivar = foo; 将调用[self setIvar:foo] 访问方法(或@property 的setter= 方法)。

【讨论】:

    【解决方案2】:

    在非 ARC 环境中,self->ivar 和 ivar 均不包含 Objective-C 调用,而是从内存中设置和获取标量。点语法(例如self.ivar 或[self setIvar:])对可以处理内存管理等的setter/getter 方法进行Objective-C 调用。Apple 的@property 包括@synthesize,它会为您编写这些方法实现。

    在 ARC 环境中,属性和手动分配 ivar 都包含一些内存管理逻辑。甚至可能,在优化的 ARC 环境中,@property 的使用只是使用 ARC 的内置逻辑,而不是尽可能进行 Objective-C 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多