好的,我很困惑! 我曾经使用过 - >每当我访问我的实例对象时,现在我看到我在我的应用程序中设置它们之后:didFinishLaunching就像这样:
self->counter = [NSNumber numberWithFloat:0.0f];
在路上我被抛出一个异常,检查了我的调试器并看到该计数器指向<non objective c object>
我将行改为:
self.counter = [NSNumber numberWithFloat:0.0f];
现在我在调试器中看到我有另一个变量。
那么,这里发生了什么?
答案 0 :(得分:3)
self->counter = [NSNumber numberWithFloat:0.0f];
使用直接访问ivar。使用self
,它等于counter = [NSNumber numberWithFloat:0.0f];
,其中counter
是ivar。也就是说self->
是实例方法中的冗余范围限定。
self.counter = [NSNumber numberWithFloat:0.0f];
是[self setCounter:[NSNumber numberWithFloat:0.0f]];
的语法糖。具体来说,声明动态地向对象的setter发送消息。 Although there are exceptions,你不应该在不处于部分构造/破坏状态时使用访问器。
答案 1 :(得分:2)
您在询问iVars和属性之间的区别。关于这个问题已经有了很好的答案here。