如果我在 -init 中什么都不做,是否与仅调用 [MyClass alloc] 相同?

2024-01-07

如果我有一个NSObject子类要么没有-init方法或根本不执行任何操作-init,这两种方式创建的实例有什么区别:

MyClass *instance = [MyClass alloc];
MyClass *instance = [[MyClass alloc] init];

通过“什么都不做”-init" I mean

- (id)init {
    self = [super init];
    if (self) {
    }
    return self;
}

Since NSObject's -init方法本身什么也不做,我看不出有什么区别,但当然建议是你must call -init正确准备一个对象。

这是来自的片段NSObject's -init https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/init方法让我想知道这个:

NSObject类中定义的init方法不进行初始化;它只是返回 self。


如果我有一个NSObject子类要么没有-init方法或 只是什么都不做-init,有什么区别吗 实例创建有两种方式:

MyClass *instance = [MyClass alloc];
MyClass *instance = [[MyClass alloc] init];

从技术上来说, 没有区别。

但这并不意味着您应该使用裸机+alloc to ever出于多种原因创建实例。

首先,它是事物的主体。 Objective-C 编码标准说+alloc应该始终跟随-init.

其次,这一切都与一致性和代码维护有关。重构时会发生什么MyClass成为某个类的子类,其中指定的初始值设定项实际上很关键?会发生一个令人讨厌的、难以弄清楚的错误。

相关的是,请注意使用+new由于类似的原因几乎已被弃用。它使重构变得乏味(该死!还得分解这个调用站点!),而且便利性非常小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我在 -init 中什么都不做,是否与仅调用 [MyClass alloc] 相同? 的相关文章

随机推荐