オブジェクトがメソッドから返された時点でautoreleaseが呼び出されているすべての例がありますが、メモリの割り当てとオブジェクトの返却の間に例外が発生した場合、これがメモリリークを危険にさらすことはありませんか?だから私は何を意味するか、それは少し明確にするObjective C - return文でautoreleaseが呼び出される前に例外が発生した場合はどうなりますか?
NSString *newString = [[NSString alloc] init];
//Do some other stuff which causes exception
return [newString autorelease];
:
@autoreleasepool {
try {
SomeObject *newObject = [SomeClass generateAutoreleaseObject];
} @catch (NSException *e) {
//log exception and carry on.
}
}
次のようにgenerateAutoreleaseObjectがある場合にメモリリークがありますか?
(SomeObject*)generateAutoreleaseObject {
SomeObject *newObject = [[SomeObject alloc] init];
//Do some other stuff which causes exception
return [newObject autorelease];
}
ので、自動解放オブジェクトを返すの基礎クラスはこれを処理しますし、私はそれがURLからの読み込みに問題があったのでstringWithContentsOfURLは約浮動任意のメモリを残していないだろうという知識で私のベッドで今夜は安全簡単に眠ることができる場合?
恐ろしい答え、感謝:より多くの場合
が、ここでは、このトピック上の2人のアップルのランタイムのエンジニアです。 – Travis