Действительно, существует тип универсального указателя; это 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
, может быть назначен этому указателю, и вы все еще позволяете компилятору выполнять проверку типов.