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