ios - 为何建议在init方法中建议调用self = [super init]
天蓬老师
天蓬老师 2017-04-17 17:25:37
[iOS讨论组]

看别人推荐如题这种做法,是我的理解有误?

我个人一直理解,只有在重写init时 调用if (self = [super init]);
而像其他自定义的方法 initWithXXX等时 应该都调用 self = [self init]?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHPz

这不是推荐不推荐的问题,是逻辑不一样。调[self init]会执行你写在-(id)init里的代码,而[super init]会绕过这些代码,直接执行父类的init方法。到底调哪个,要看你希望逻辑是怎样。如果你没写-(id)init,那这两个完全一样。

Swift 这一点说得更清楚一些。调[super init]的是指定构造器,调[self init]的是便利构造器。一般来说,如果这个类有两个完全不同的初始化方式(比如 initWithFrame、 initWithCoder 这种),不应该互相调用,应该调 super 的 init 方法;如果一个初始化方法只是在另一个基础上做点小修改,那就应该调 self 的 init 方法。

ringa_lee

super 就是个障眼法 ,编译器符号, 它可以替换成 [slef class], 只不过 使用[super init]方法是从 self 的超类的方法列表中开始 寻找对应的实现。

如果你在本类中重写了init方法,并且做了一些必须的初始化工作,当你使用initWith:这种初始化方法创建实例时,不想在initWith:里面重写init方法里面的初始化工作,就需要使用[self init]。

黄舟

复杂的不用说,就说在一个方法的实现中调用这个方法本身,这种代码显然是要崩的,底层C语言就不允许函数这样写。你既然写了initWith,里面自然可以调self init,根本不是一个方法了。写个dogRun方法里面一样可以调用init作为初始化方法

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号