Доступ к геттерам с использованием точечной нотации в Obj-C - PullRequest
0 голосов
/ 20 марта 2012

Я недавно обнаружил, что нет необходимости объявлять геттер как свойство для использования точечной нотации. Я не знаю о других версиях компилятора, но это верно для Apple LLVM 3.1. Кто-нибудь предвидит какие-либо проблемы с этим? Итак, в основном:

 ---------Star.h----------  
 -(UInt32)age;

 ---------Star.m----------
 -(UInt32)age
 {
    //get star age
    return starAge;   
 }


 ---------RootViewController.m----------
 {
 ...
 //use this instead of [star age] even if there is no synthesized property "age" 
 NSLog(@"%i", star.age);

 ...

 }

Ответы [ 4 ]

0 голосов
/ 20 марта 2012

Даже если это работает, я считаю хорошей практикой добавить эту простую дополнительную строку кода, чтобы объявить его как свойство, даже если все, что он делает - это делает ваш код более читабельным.

0 голосов
/ 20 марта 2012

Ваш код вполне приемлем.Компилятор сделает что-то похожее, если вы напишите:

 ---------Star.h----------  
@property (readonly) UInt32 age;


 ---------Star.m----------
@synthesize age = starAge;
0 голосов
/ 20 марта 2012

Что ARC делает из этого?

Что произойдет, если вы попытаетесь скомпилировать:

- (void)setX:(NSInteger)x {
    NSLog(@"New x is %i", x);
}

...

[self setX:100];

без объявления X как свойства?

0 голосов
/ 20 марта 2012

Ваш код в порядке. Точечная нотация - это просто еще один способ вызова метода экземпляра.

self.foo = bar; совпадает с [self setFoo:bar];
bar = self.foo; совпадает с bar = [self foo];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...