alloc如何在Objective C中工作?

时间:2012-01-06 13:34:19

标签: objective-c

我知道alloc是一个类方法,它创建类的对象并指向它的“isa”指向类的指针,以及消息在运行时的映射方式。

我对allocWithZone和zone有一些了解。

任何人都可以告诉我或指向一个很好的链接解释: -

isa指针是如何指向正确的类的?

分配了多少内存?

如何创建从父类继承的成员的内存?

如果id是objc_object *的typedef,它的isa指针指向什么,那么它是如何保存anyobject的,因为isa指针会将我们带到具有方法选择器的dispatch表但是它们有什么告诉我们什么假设数据成员在那里?

2 个答案:

答案 0 :(得分:9)

编译器在后台为您插入objc运行时调用。您可以在包含路径objc/中找到该库。 objc/runtime.h可能是最感兴趣的。作为奖励,一些选择的常见消息会绕过objc_msgSend这些插入。

isa指针是如何指向正确的类的?

objc_constructInstance

分配了多少内存?

class_createInstance
class_getInstanceSize

如何创建从父类继承的成员的内存?

内存归零,isa已设置。

如果id是objc_object *的typedef,它的isa指针指向什么,那么它是如何保存anyobject的,因为isa指针会将我们带到具有方法选择器的dispatch表但是它们有什么告诉我们假设哪些数据成员在那里?

无论在初始化时设置了什么。 ObjC对象指针只是原始内存。与其他语言不同,编写类型的转换和转换是变量地址的直接集合 - 在以下构造中,内存中没有明确的类型提升或转换:

MONDisplay * display = [NSString string];
NSLog(@"%@", display);

指针与[NSString string]返回的值相同。

答案 1 :(得分:2)

只是为了加入讨论, 我收到了一个关于Objective-C内部的其他类似问题的非常好的链接。

http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf

我希望这对那些到达这里的人有所帮助:)。