2

好吧,我很困惑!我曾经在访问我的实例对象时使用 ->,但现在我看到在我的应用程序中设置它们之后:didFinishLaunching 如下所示:

self->counter = [NSNumber numberWithFloat:0.0f];

在路上我被抛出异常,检查我的调试器并看到计数器指向一个<non objective c object>

我将行更改为:

self.counter = [NSNumber numberWithFloat:0.0f];

现在我在调试器中看到我有另一个变量。

那么,这里发生了什么?

4

2 回答 2

3

self->counter = [NSNumber numberWithFloat:0.0f];使用对 ivar 的直接访问。,self它等于counter = [NSNumber numberWithFloat:0.0f];where counteris an ivar。也就是说,是self->实例方法内的冗余范围限定。

self.counter = [NSNumber numberWithFloat:0.0f];是 . 的语法糖[self setCounter:[NSNumber numberWithFloat:0.0f]];。具体来说,声明动态地向对象的设置器发送消息以获取计数器。尽管有例外,但您应该倾向于在不处于部分构造/破坏状态时使用访问器。

于 2012-11-20T11:05:09.147 回答
2

您在询问 iVar 和属性之间的区别。这个问题已经有很好的答案

于 2012-11-20T11:01:34.333 回答