如果我有一个NSObject子类,它没有-init方法,或者在-init中根本不做任何事情,创建这两种方式的实例之间有什么不同:
MyClass *instance = [MyClass alloc]; MyClass *instance = [[MyClass alloc] init];
我的意思是“不做任何事情”
- (id)init { self = [super init]; if (self) { } return self; }
由于NSObject的-init方法本身什么也不做,我看不到有任何区别,但是当然建议是必须调用-init来正确准备一个对象.
这是NSObject
‘s -init
方法的代码段,让我想到这一点:
The init method defined in the NSObject class does no initialization; it simply returns self.
解决方法
If I have an
NSObject
subclass which either has no-init
method or
simply does nothing in-init
,is there any difference between an
instance created these two ways:
MyClass *instance = [MyClass alloc]; MyClass *instance = [[MyClass alloc] init];
技术上没有什么区别.
但是,这并不意味着您应该使用裸机分配来创建一个实例,原因有很多.
首先,这是事情的原则. Objective-C编码标准表示alloc应该始终遵循–init.
其次,它是关于一致性和代码维护的.当您将MyClass重构为某个类的子类时,会发生什么,指定的初始化程序实际上是关键的?一个讨厌的,很难弄清楚,bug是怎么回事.
相关性,请注意,由于类似的原因,新的使用已被淘汰.这使得重构繁琐(必须断开这个呼叫站点!),而且方便因素非常小.