Objective-C で iPhone 用の新しいクラスを構築しているとしましょう。init メソッドの 1 つで、手動でメモリを割り当てたいと考えています。だから、私はこのようなものを持っているかもしれません:
- (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() をトリガーしますか?