Теперь я немного запутался после того, как увидел фрагмент кода для iPhone SDK, который использует -> вместо точечной нотации. Он очень похож на PHP, но он работает на iPhone. Может ли кто-нибудь объяснить, что случилось с ->, что я должен знать о какой-то глубокой С-секретной?Что это означает -> символ означает?
Пример:
- (void)setFileURLs: (NSArray*)elements {
if (self->fileURLs != elements)
fileURLs является переменной экземпляра или свойство, например, так:
@property(nonatomic, retain) NSArray *fileURLs;
и есть более @synthesize для fileURLs. Теперь, что я думаю это: Потому что это метод setter для файловых серверов, было бы плохо использовать точечную нотацию для доступа к переменной экземпляра. Фактически, когда я это делаю, приложение аварийно завершает работу. Это связано с тем, что он называет себя снова и снова, поскольку точечная нотация обращается к методу доступа, а не к ivar напрямую. Но -> будет напрямую обращаться к ivar.
Если это верно, вопрос немного меняется: зачем писать «self-> fileURLs», а не только «fileURLs»? В чем смысл добавлять это самонаводящиеся перед ним? Имеет ли это смысл? Зачем?
За исключением того, что, поскольку определено свойство, self.fileURLs будет работать нормально ... похоже, что кто-то использовал C++ с помощью Objective-C. –
self-> fileURLs обращается к переменной-члену (как указано выше в mouviciel). self.fileURLs запускает метод доступа для свойства fileURLs, который может вернуть что-то совершенно другое. –