我知道alloc是一个类方法,它创建类的对象并指向它的“isa”指向类的指针,以及消息在运行时的映射方式。
我对allocWithZone和zone有一些了解。
任何人都可以告诉我或指向一个很好的链接解释: -
isa指针是如何指向正确的类的?
分配了多少内存?
如何创建从父类继承的成员的内存?
如果id是objc_object *的typedef,它的isa指针指向什么,那么它是如何保存anyobject的,因为isa指针会将我们带到具有方法选择器的dispatch表但是它们有什么告诉我们什么假设数据成员在那里?
答案 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
我希望这对那些到达这里的人有所帮助:)。