加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:13:42 所属栏目:百科 来源:网络整理
导读:如果我有一个NSObject子类,它没有-init方法,或者在-init中根本不做任何事情,创建这两种方式的实例之间有什么不同: MyClass *instance = [MyClass alloc];MyClass *instance = [[MyClass alloc] init]; 我的意思是“不做任何事情” - (id)init { self = [sup
如果我有一个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是怎么回事.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读