假设我正在用 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()?