self.var和var之间的区别

在Objective-C类中使用self.var和just var什么区别? 这些或那个有益处还是危险?

 foo = self.var; self.var = foo; 

在概念上是相同的

 foo = [self var]; [self setVar: foo]; 

所以使用点符号,你真的发送消息给自己。

 foo = var; var = foo; 

在概念上是一样的

 foo = self->var; self->var = foo; 

所以不使用点符号来访问一个实例variables就像把自己当作指向C结构的指针并直接访问struct字段一样。

在几乎所有情况下,最好使用该属性(点表示法或消息发送表示法)。 这是因为该属性可以自动执行必要的保留/复制/释放来停止内存泄漏。 此外,您可以使用属性观察键值 。 子类也可以覆盖属性来提供自己的实现。

使用属性的两个例外是在init中设置ivar和在dealloc中释放ivar时。 这是因为您几乎可以肯定地希望避免在这些方法中意外地使用子类覆盖,并且您不想触发任何KVO通知。

self.var调用var属性 。 在幕后,Objective-C为属性自动生成一个getter(或者你可以自己创build一个),所以self.var使用这个getter。 Plain var直接访问实例variables(即,它不通过getter来获取值)。

重复的

  • 在Objective-C中,如何在没有显式@property的情况下使用点语法?
  • 自我variables和variables差异
  • 使用obj-c访问器和使用点语法有什么区别?
  • iVars,有没有自我?
  • “自我”是必要的吗?

也可能是大约十几个其他人,通过使用网站右上angular的“search”框,您可以在约15秒内find其他人。