alloc如何在Objective C中工作?

Amo*_*kar 10 objective-c

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

我对allocWithZone和区域有一些了解.

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

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

分配了多少内存?

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

如果id是objc_object*的类型定义,什么是它的isa指针指向,那么它是如何保持anyobject因为isa指针将获得我们拥有选择的方法调度表,但他们有什么,告诉我们哪些数据成员假设在那里?

jus*_*tin 9

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

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

objc_constructInstance

分配了多少内存?

class_createInstance
class_getInstanceSize
Run Code Online (Sandbox Code Playgroud)

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

存储器归零,并isa设置.

如果id是objc_object*的类型定义,什么是它的isa指针指向,那么它是如何保持anyobject因为isa指针将获得我们拥有选择的方法调度表,但他们有什么,告诉我们哪些数据成员假设在那里?

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

MONDisplay * display = [NSString string];
NSLog(@"%@", display);
Run Code Online (Sandbox Code Playgroud)

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