2009-10-14 4 views
2

Теперь я немного запутался после того, как увидел фрагмент кода для 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»? В чем смысл добавлять это самонаводящиеся перед ним? Имеет ли это смысл? Зачем?

ответ

4

a->b - всего лишь другой способ для написания (*a).b. Это способ доступа к полям структуры или переменным экземпляра объекта, на которые ссылается указатель.

-1

См раздел «Другие операторы» по адресу:

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

Поскольку self является указателем, вы должны использовать -> и не . для доступа к его членам. Предполагая, что ссылка self на fileURLs - это, скорее всего, стиль кодирования, используемый автором (что эквивалентно написанию this.member).

+0

За исключением того, что, поскольку определено свойство, self.fileURLs будет работать нормально ... похоже, что кто-то использовал C++ с помощью Objective-C. –

+0

self-> fileURLs обращается к переменной-члену (как указано выше в mouviciel). self.fileURLs запускает метод доступа для свойства fileURLs, который может вернуть что-то совершенно другое. –

Смежные вопросы