ARCは非常に推奨されているため、現在は実用的ではないかもしれない質問がありますが、メモリ管理を勉強していて、よくわからないことがあります。
私はこの方法を持っています
+(NSNumber *)releaseTooEarly
{
NSNumber *createdNumber = [[NSNumber alloc] initWithInteger:5];
NSLog(@"retain count before release: %d", createdNumber.retainCount); //Prints 2
[createdNumber release];
NSLog(@"%@", createdNumber); //Prints 5
return createdNumber;
}
- オブジェクトが作成されたばかりの場合、保持カウントは 2 ではなく 1 にする必要がありますか?
- この種の状況では、値を返すことができるように autorelease を使用する必要があることを理解しています。呼び出し元は、割り当てが解除される前にそれを利用できます。代わりに保持を使用すると、すぐにオブジェクトの割り当てが解除されると思いましたが、次の NSLog はそれがまだ終了していることを示し、値が正常に返されます。
関数内でオブジェクトの割り当てを解除できない自動解放プール内にいるかどうか疑問に思っています。
ARC を使用する必要があることはわかっていますが、この結果の理由を理解したいだけです。