Общий тип в объективе C - PullRequest
3 голосов
/ 19 июля 2011

У меня есть несколько типов контроллеров корневого представления, которые я хочу создавать по одному за раз (один раз на вызов функции).Я хочу создать свойство и назначить его этому вновь созданному viewcontroller.Проблема, очевидно, заключается в том, что это свойство должно иметь определенный тип, зависящий от viewcontroller, для которого он создается ...

Есть ли способ создать универсальный указатель для преодоления этого ....

Ответы [ 2 ]

8 голосов
/ 19 июля 2011

Действительно, существует тип универсального указателя; это id:

typedef struct objc_object {
    Class isa;
} *id;

Что определено в objc.h , части среды выполнения . Вы можете назначить любой объект указателю типа id:

id myString = [[NSString alloc] init];
id myArray = [[NSArray alloc] init];
id myNumber = [[NSNumber alloc] init];

При программировании в Какао также возможно использовать NSObject * как своего рода общий указатель; поскольку это основной корневой класс, почти каждый объект наследуется от него. Однако от этого мало что получится (на самом деле вы начнете получать предупреждения «Может не отвечать»), и это не идиоматично.

Как правило, лучше вводить переменные как можно точнее. В этом случае, поскольку все объекты будут каким-либо контроллером представления, я бы рекомендовал использовать UIViewController * в качестве типа переменной. Тогда любой объект, который наследуется от UIViewController, может быть назначен этому указателю, и вы все еще позволяете компилятору выполнять проверку типов.

6 голосов
/ 19 июля 2011

То, что id в Objective-C, нетипизированный указатель объекта Objective-C.

id test = [[NSMutableArray alloc] init];

и т.д.

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