objective-c – 如果我在-init中什么都不做,是否只是调用[MyClass alloc]?

前端之家收集整理的这篇文章主要介绍了objective-c – 如果我在-init中什么都不做,是否只是调用[MyClass alloc]?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个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是怎么回事.

相关性,请注意,由于类似的原因,新的使用已被淘汰.这使得重构繁琐(必须断开这个呼叫站点!),而且方便因素非常小.

猜你在找的C&C++相关文章