如果我有一个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(使用前将#替换为@)