В чем разница между '.' и '->' iOS?

Хорошо, я в замешательстве! Я использовал -> всякий раз, когда получал доступ к своим объектам экземпляра, но теперь я вижу это после того, как я установил их в своем приложении: didFinishLaunching вот так:

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

Вниз по дороге меня выкинули с исключением, проверили мой отладчик и увидели, что счетчик указывает на <non objective c object>

Я изменил строку на:

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

И теперь я вижу в отладчике, что у меня есть еще одна переменная.

Итак, что здесь происходит?

2 ответа

Решение

self->counter = [NSNumber numberWithFloat:0.0f]; использует прямой доступ к ивару. С self, это равно counter = [NSNumber numberWithFloat:0.0f]; где counter это ивар. Так сказать self-> является избыточной квалификацией области действия в методе экземпляра.

self.counter = [NSNumber numberWithFloat:0.0f]; является синтаксическим сахаром для [self setCounter:[NSNumber numberWithFloat:0.0f]];, В частности, объявление динамически сообщает установщик объекта для счетчика. Хотя есть исключения, вы должны предпочесть использовать аксессор, если он не находится в частично построенном / разрушенном состоянии.

Вы спрашиваете о разнице между iVars и свойствами. Здесь уже есть отличный ответ на этот вопрос.

Другие вопросы по тегам