2

Ok, I am confused! I used to use -> whenever I accessed my instance objects, but now I see that after I set them in my application:didFinishLaunching like this:

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

Down the road I got thrown out with an Exception, checked my debugger and saw that counter was pointing to a <non objective c object>

I changed the line to :

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

And now I see in the debugger that I have yes another variable.

So, what is happening here?

4

2 に答える 2

3

self->counter = [NSNumber numberWithFloat:0.0f];ivar への直接アクセスを使用します。の場合、はivarselfと同じです。つまり、インスタンス メソッド内の冗長なスコープ修飾です。counter = [NSNumber numberWithFloat:0.0f];counterself->

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 に答える