在Objective-C实例中通常的初始化顺序(例如在指定的初始化器中)如下所示:
这是一个众所周知的模式,但真的有必要测试self是否被分配吗?我的意思是,如果超级方法中出现错误,它不会引发异常而只是返回nil吗?这真的是一种安全的模式吗?如果调用super时出现问题但仍然返回(随机)指针怎么办?
当然,这是防御性编程的问题,但对于你确信永远不会出现nil结果的情况下,进行如此多的测试看起来有些夸张。如果您知道可能会发生(必须记录),那么检查self当然是有意义的。
- (id)initWithFrame: (NSRect)frame {
self = [super initWithFrame: frame];
if (self != nil) {
// Do your stuff.
}
return self;
}
这是一个众所周知的模式,但真的有必要测试self是否被分配吗?我的意思是,如果超级方法中出现错误,它不会引发异常而只是返回nil吗?这真的是一种安全的模式吗?如果调用super时出现问题但仍然返回(随机)指针怎么办?
当然,这是防御性编程的问题,但对于你确信永远不会出现nil结果的情况下,进行如此多的测试看起来有些夸张。如果您知道可能会发生(必须记录),那么检查self当然是有意义的。
nil
,很有可能仍然会遇到异常,只是不在init
方法中。 - nhgrifsuper
函数出现问题,然后返回的不是nil
或有效指针而是垃圾值,那么这段代码存在严重的 bug,开发者应该受到惩罚。 - rmaddy