目标C中的通用类型

use*_*142 3 view objective-c uiviewcontroller

我有几种类型的os根视图控制器,我想一次实例化一个(每个函数调用一次).我想创建一个属性并将其分配给这个新创建的viewcontroller.问题显然是这个属性必须是一个特定的类型,依赖于它实例化的viewcontroller ...

有没有办法创建一个通用指针来克服这个....

Jos*_*ell 8

确实存在通用指针类型; 它是id:

typedef struct objc_object {
    Class isa;
} *id;
Run Code Online (Sandbox Code Playgroud)

这是在objc.h中定义的,是运行时的一部分.您可以将任何对象分配给类型为的指针id:

id myString = [[NSString alloc] init];
id myArray = [[NSArray alloc] init];
id myNumber = [[NSNumber alloc] init];
Run Code Online (Sandbox Code Playgroud)

当在Cocoa中编程时,它也可以NSObject *用作一种通用指针; 因为它是主要的根类,所以几乎每个对象都从它继承.然而,这并没有太大的收获(事实上,你会开始得到"可能无法响应"编译器警告),而且这不是惯用的.

通常,最好尽可能具体地键入变量.在这种情况下,由于所有对象都是某种视图控制器,我建议使用它UIViewController *作为变量类型.然后,任何继承自的对象UIViewController都可以分配给该指针,并且您仍然允许编译器进行类型检查.


Yan*_*min 6

id就是Objective-C中的内容,一个无类型的Objective-C对象指针.

id test = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

等等