Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c alloc在目标C中是如何工作的?_Objective C - Fatal编程技术网

Objective c alloc在目标C中是如何工作的?

Objective c alloc在目标C中是如何工作的?,objective-c,Objective C,我知道alloc是一个类方法,它创建类的对象并将其“isa”指针指向类,这就是消息在运行时的映射方式 我对allocWithZone和zones有一些想法 有人能告诉我或给我指出一个好的链接,解释:- isa指针如何指向正确的类 分配了多少内存 如何创建从父类继承的成员内存 如果id是objc_object*的typedef,那么它的isa指针指向什么,那么它如何保存任何对象,因为isa指针将使我们到达具有方法选择器的分派表,但它们是否有任何东西告诉我们假定存在哪些数据成员?编译器通过objc运

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

我对allocWithZone和zones有一些想法

有人能告诉我或给我指出一个好的链接,解释:-

isa指针如何指向正确的类

分配了多少内存

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


如果id是objc_object*的typedef,那么它的isa指针指向什么,那么它如何保存任何对象,因为isa指针将使我们到达具有方法选择器的分派表,但它们是否有任何东西告诉我们假定存在哪些数据成员?

编译器通过objc运行时为您插入调用,在幕后。您可以在include路径
objc/
中找到该库
objc/runtime.h
可能是最感兴趣的。作为奖励,一些选择公共消息通过这些插入绕过objc\u msgSend

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

class_createInstance
class_getInstanceSize
objc\u constructInstance

分配了多少内存?

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

class_createInstance
class_getInstanceSize
内存归零,并设置
isa

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

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

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

指针与
[NSString]

返回的值完全相同,只是为了添加到讨论中, 关于Objective-C内部的另一个类似问题,我收到了一个非常好的链接


我希望这将对许多来到这里的人有所帮助:)

id
是一种表示指针的类型,而不是对象,因此它没有自己的
isa
。当您声明类型为
id
的变量时,这只意味着您可以为任何类型的对象分配一个指针,编译器不会对此抱怨。当然,对象本身有一个
isa
成员,根据定义,它指向所讨论的对象是其实例的类。