1

我知道在 C 中将一个变量转换为另一种类型会告诉编译器该变量在内存中具有该类型和大小。

例子:

int* a = (char*)b;

取 b 的值(这是一个 1 字节的内存地址)并将其存储在 4 字节的变量 a 中。(如我错了请纠正我)

转换一个 Objective-C 对象是如何工作的?我也明白每个对象只是一个 C 结构,其中包含指向其类、实例变量列表等的指针。

如果我有一个名为 MyView 的 UIView 子类的类,并且我传递了一个指向 UIView 的指针,也许是一个方法参数,我这样做:

-(id)setupThisViewForMe:(UIView*)aView {
    MyView* newView = (MyView*)aView;
    newView = [[MyView alloc]initWithFrame:CGRectMake(0.0f,0.0f,100.0f,100.0f)];
    [newView takeOverTheWorldWithMyMethodInSubclass];
    return newView;
}

编译器在编译时到底在做什么?

4

1 回答 1

4

编译器在编译时 [当你转换 Objective C 对象时] 到底在做什么?

几乎没有:编译器执行与 ARC 相关的检查,确保您没有将弱指针强制转换为强变量,反之亦然,但除此之外,编译器相信您会做正确的事情。当然,如果你对你的编译器“撒谎”,它会在运行时以不受支持的消息异常“回报”。

于 2013-10-16T02:41:57.520 回答