2 つのオブジェクトが互いに保持されている場合、クロス保持状況をどのように回避しますか?
このクラス構造を考えてみましょう:
Container.h
@interface Container : NSObject {
NSObject *child;
}
@property (nonatomic, retain) NSObject *child;
@end
コンテナ.m
@implementation Container
@synthesize child;
- (void)dealloc {
[child release];
[super dealloc];
}
@end
次に、メモリ保持カウントをテストする場合:
- (void)testDoubleRetain {
Container *A = [[Container alloc] init];
Container *B = [[Container alloc] init];
NSLog(@"A retainCount: %d", [A retainCount]);//returns 1
NSLog(@"B retainCount: %d", [B retainCount]);//returns 1
[A setChild:B];
[B setChild:A];
NSLog(@"A retainCount: %d", [A retainCount]);//returns 2
NSLog(@"B retainCount: %d", [B retainCount]);//returns 2
[A release];
[B release];
NSLog(@"A retainCount: %d", [A retainCount]);//returns 1
NSLog(@"B retainCount: %d", [B retainCount]);//returns 1
}
したがって、私の理解では、保持カウントは正しいカウントを示しているはずです。しかし、実際にオブジェクトの割り当てを解除するにはどうすればよいでしょうか。このコード ブロックの後、これら 2 つのオブジェクトはメモリ内にとどまるからです。