【发布时间】:2014-01-02 23:00:10
【问题描述】:
Objective-C 实例(例如,在指定的初始化程序中)中通常的初始化序列如下:
- (id)initWithFrame: (NSRect)frame {
self = [super initWithFrame: frame];
if (self != nil) {
// Do your stuff.
}
return self;
}
这是一个众所周知的模式,但是否真的有必要测试 self 是否被赋值?我的意思是,如果在 super 方法中出现问题,与其只返回 nil,不如引发异常?这是一个安全的模式吗?如果对 super 的调用有问题但仍然返回(随机)指针怎么办?
这当然是防御性编程的问题,但是对于您确定永远不会有 nil 结果的案例进行如此多的测试看起来确实有些夸张。如果您知道它可能发生(必须记录在案),那么检查 self 当然很有意义。
【问题讨论】:
-
很有可能,如果您返回
nil,您仍然会遇到异常,只是不会在init方法中。 -
是的。遵守既定惯例。
-
如果对
super的调用出现问题,然后它返回垃圾而不是nil或有效指针,那么该代码中存在严重错误,应该鞭打开发人员。 -
我刚刚注意到这是一个古老的讨论:stackoverflow.com/q/1287950/104790
标签: objective-c