Цель-C: приведение объектов, извлеченных из коллекции - PullRequest
1 голос
/ 16 июня 2011

В Objective-C при извлечении объектов из коллекции (например, с использованием -[NSArray objectAtIndex:]), когда необходимо привести объект к исходному классу и почему?

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

1 Ответ

4 голосов
/ 16 июня 2011

Вам нужно привести его при использовании точечной нотации из-за простой вещи: в противном случае компилятор обрабатывает его как struct objc_object { Class isa; } *, у которого нет члена, который вы хотите получить.(На самом деле, чтобы получить доступ к isa, вам все равно понадобится примечание ->.)

Это в основном потому, что -[NSArray objectAtIndex:] возвращает id, который определяется как:

typedef struct objc_object { Class isa; } *id;

Вам нужно разыграть его, чтобы использовать точечную нотацию, но вам не нужно разыгрывать его для отправки ему сообщений. Мой подход: всегда разыгрывать.:)

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