【Objective-C编程开发】关于子类重写父类初始化方法的争论
来源:互联网 发布:mysql安装教程5.28 编辑:程序博客网 时间:2024/05/05 16:32
写出本篇文章实属不是我的本意,只因今天在相关技术群上有两个人争得耳红眼赤.今天趁着有空写出这个基础性内容,希望能帮到有些新手的疑惑。
观点A:认为在子类重写的init中没有必要进行self =[super init]父类的初始化、每个子类可以不依靠父类单独进行实例化子类,这样也不会影响到他对父类除了私有属性私有方法外的其他内容的调用。
观点B:一定要在子类重写init中进行父类初始化成功的判断 也就是 if(self =[super init]).否则可能会带来一系理未知的问题
OK.现在我们就以他们两人的观点进行实践与解析:
1.观点A:
@implementation RetainTracker- (id) init{//if (self = [super init])// {NSLog (@"我没有进行父类初始化");//}return (self);} // init@end // RetainTrackerint main(int argc, const char * argv[]){ RetainTracker* retain =[[RetainTracker alloc]init]; return (0);}
运行后效果图:
2015-08-09 13:30:55.122 RetainCount[5439:2729681] 我没有进行父类初始化2.观点B:
#import <Foundation/Foundation.h>@interface RetainTracker : NSObject@end // RetainTracker@implementation RetainTracker- (id) init{if (self = [super init]) {NSLog (@"我进行了父类初始化");}return (self);} // init@end // RetainTrackerint main(int argc, const char * argv[]){ RetainTracker* retain =[[RetainTracker alloc]init]; return (0);}运行后效果图:
2015-08-09 13:32:53.786 RetainCount[5455:2741074] 我进行了父类初始化
貌似两人都能成功实现,这样是不是证明观点A所说的思想是对的。我想说NO.观点A的不进行父类初始化没报错能实现也是事实。只不过是还没遇到真正的工程遇到父类初始化有问题的。举个例子:例如当父类作为包含初始化图片的这部分内容。如果这个图片丢失了则加了self =super init这个判断可以大大的提高安全性跟完整性。保证子类不会明知父类有东西有毛病还冒死的初始化执行下去。而当这个问题出现在观点A的编程中只能说这个项目就有问题了。
作为一个优秀的程序员,像安全性的这些问题我也就不用多讲了,这些都必定是我们需要考虑的东西,尤其在线程的编程上。
关于这个争论点就分析到这里,有讲的不对的地方还望指出互相探讨。
0 0
- 【Objective-C编程开发】关于子类重写父类初始化方法的争论
- 关于《objective-c程序设计》478页 Calculator的初始化方法(即子类初始化方法)
- 关于子类重写父类方法override
- java 子类重写父类的方法
- java 子类重写父类的方法
- java 子类重写父类的方法
- 子类重写父类的方法注意事项
- 关于在子类中重写父类的throws异常的方法的注意事项
- 关于Java中子类能否继承和重写父类的静态方法问题
- Objective-c 类的继承 方法重写 方法重载
- 转: Objective-c 类的继承 方法重写 方法重载
- objective-C编程 初始化方法摘要
- Objective-C学习笔记(二十二)——初始化方法init的重写与自定义
- 子类方法重写父类方法的原则
- Objective-C 编程语言(3) 定义类---分配并初始化对象,init方法的返回值,初始化方法的实现
- Objective-C 编程语言(3) 定义类---分配并初始化对象,init方法的返回值,初始化方法的实现
- Objective-C 编程语言(3) 定义类---“指定的”初始化方法
- JAVA子类方法重写父类方法
- C++宏定义详解
- MAC OSX10.10上搭建Apache,PHP,MySQL5.6.22,phpMyAdmin开发环境
- less初探
- VS2015使用批处理文件快捷打开命令行,即可使用nmake
- JS跨页调用打印
- 【Objective-C编程开发】关于子类重写父类初始化方法的争论
- Python基本语法
- DB 查询分析器 6.04 发布 ,本人为之撰写的相关技术文章达78篇
- 并发编程模型和访问控制
- iOS-绘图介绍
- DevExpress XPO 开发指南 简要
- 计算机领域在于创新,做好自己散文送上
- 进程调度算法
- 剑指Offer面试题34(java版):丑数