を示しています。retainCountは、私はクラスでこのコードを持っextrange行動
- (void)cancel {
if (_cancelBlock)
_cancelBlock();
}
- (void)overrideCancelWithBlock:(void(^)(void))cancelBlock {
[_cancelBlock release];
NSLog(@"AsyncOperation-overrideCancelWithBlock-[cancelBlock retainCount]=%lu (before)", [cancelBlock retainCount]);
_cancelBlock = [[cancelBlock copy] retain];
NSLog(@"AsyncOperation-overrideCancelWithBlock-[_cancelBlock retainCount]=%lu (after)", [_cancelBlock retainCount]);
}
- (void)dealloc
{
NSLog(@"AsyncOperation-dealloc-[_cancelBlock retainCount]=%lu (before)", [_cancelBlock retainCount]);
[_cancelBlock release];
NSLog(@"AsyncOperation-dealloc-[_cancelBlock retainCount]=%lu (after)", [_cancelBlock retainCount]);
[super dealloc];
}
こののNSLog() 'sの出力を、次のとおりです。
AsyncOperation-overrideCancelWithBlock-[cancelBlock retainCount]=1 (before)
AsyncOperation-overrideCancelWithBlock-[_cancelBlock retainCount]=1 (after)
AsyncOperation-dealloc-[_cancelBlock retainCount]=1 (before)
AsyncOperation-dealloc-[_cancelBlock retainCount]=1 (after)
copy
メソッドのドキュメントは述べていますこの:
特別な考慮事項
ガベージコレクションではなく、マネージメモリを使用している場合、このメソッド は、 を返す前に新しいオブジェクトを保持します。しかし、 メソッドの呼び出し側は、返されたオブジェクトを解放するのは です。
So. NSLog()の出力は常にretainCount
の同じ値を表示しますか?
fluchtpunktが正しいです。適切なメモリ管理ガイドラインに従っている限り、心配する必要はありません。また、多くの場合、誤解を招く可能性があるため、オブジェクトの保持カウントをチェックすることは「悪い習慣」と考えられます。 –