gpt4 book ai didi

objective-c - 为什么我不应该将 alloc 和 init 分开?

转载 作者:行者123 更新时间:2023-12-03 07:07:45 31 4
gpt4 key购买 nike

Objective-C 中初始化和分配的正常方法是

NSObject *someObject = [[NSObject alloc] init];

为什么以下内容没有被实践?

NSObject *someObject = [NSObject alloc];
[someObject init];

最佳答案

主要问题是您最终可能会使用错误的对象。

init 在许多类中都很特殊,因为它可能只是释放接收器并创建一个驻留在不同地址的新对象。因此,您的 someObject 然后指向错误的(未初始化的)实例。

有很多框架类使用 init 方法的参数来决定最好使用哪种专用子类。这种情况经常发生在 NSStringNSArray 等类簇中,但它确实可能发生在每种类型的对象上。

您可以在 ARC 中看到初始化程序的这种特殊行为:It explicitly declares that the init family of methods eats up the receiver and returns a +1 retained object 。如果初始化器总是返回接收者,则这不是必需的。

当然,您可以通过执行另一项作业来修复代码:

NSObject *someObject = [NSObject alloc];
someObject = [someObject init];

这可以解决问题。但这样做也没有任何意义。

关于objective-c - 为什么我不应该将 alloc 和 init 分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537853/

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