В чем разница между '.' и '->' 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 и свойствами. Здесь уже есть отличный ответ на этот вопрос.