假设我要在Objective-C中为iPhone建立一个新类。在我的一种初始化方法中,我想手动分配一些内存。所以,我可能会有这样的事情:
- (id)initWithSomeObject:(SomeObject *)someObject {
self = [super init];
if (self != nil) {
myObject = someObject;
[myObject retain];
if ( (memory = calloc(1, sizeof(SomeStruct)) == NULL) {
// What should I do here to clean up
[self release];
self = nil;
}
}
return self;
}
现在,假设calloc()可能失败,并且分配内存失败对我的对象来说是灾难性的,那么在if-body内应该如何正确清理呢?我应该使用一个Objective-C习惯用法或模式吗?
编辑:我包括了Rob Napier发布的代码。但是,我仍然必须释放myObject,对吗?还是添加的代码以某种方式触发了dealloc()?
最佳答案
是的,您应该释放自己,然后返回nil
。
[self release];
self = nil;
请参阅《 Objective-C编程概念》中的Issues with Initializers。