gpt4 book ai didi

objective-c - alloc 在 Objective C 中如何工作?

转载 作者:太空狗 更新时间:2023-10-30 03:26:18 26 4
gpt4 key购买 nike

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

我对 allocWithZone 和区域有一些想法。

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

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

分配了多少内存?

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

如果 id 是 objc_object* 的 typedef,它的 isa 指针指向什么,那么它如何保存任何对象,因为 isa 指针会将我们带到具有方法选择器的调度表,但它们是否有任何信息告诉我们什么数据成员应该在那里?

最佳答案

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

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

objc_constructInstance

分配了多少内存?

class_createInstance
class_getInstanceSize

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

内存归零,设置isa

如果 id 是 objc_object* 的 typedef,它的 isa 指针指向什么,那么它如何保存任何对象,因为 isa 指针会将我们带到具有方法选择器的调度表,但它们有任何东西吗?告诉我们应该有哪些数据成员?

初始化时设置的任何内容。 ObjC 对象指针只是原始内存。与其他语言不同,书面类型的转换和转换是变量地址的直接集合——在以下构造中,内存中没有显式类型提升或转换:

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

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

关于objective-c - alloc 在 Objective C 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8758609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com