gpt4 book ai didi

objective-c - alloc + init 内存使用机制

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

我只是想知道什么时候一个对象被alloc分配了一 block 内存给它,为什么init不使用那 block 内存并更改对象的地址?

NSDate *t = nil;
NSLog(@"t = %p",t); // t = 0x0

t = [NSDate alloc];
NSLog(@"t = %p",t); // t = 0x100107af0

t = [t init];
NSLog(@"t = %p",t); // t = 0x1001035a0

最佳答案

两步初始化允许我们做这些事情(即,根据调用的初始化程序用一个类的实例替换另一个类的实例)。 Foundation 和 UIKit 中的类集群利用这一点来返回针对特定用例优化的实例。例如,UIColor 本身只是其实现颜色缓存的子类的接口(interface)(所有命名初始化器,如 +blackColor),RGB 颜色空间(+colorWithRed :green:blue:alpha)、黑白色彩空间(+colorWithWhite:alpha:)、CIColor兼容性等等 NSDate 也是。当你调用 -init 时,Apple 有手段和动机返回一个不同的对象,该对象实现了与 NSDate 相同的接口(interface)作为优化,因为你真的不应该关心你得到什么只要当您尝试正确地向它发送消息时它不会发射导弹。

关于objective-c - alloc + init 内存使用机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729097/

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