アナライザマークこの構造のための潜在的な漏れ
-
25-09-2019 - |
質問
次のコードで分析マークsetMyDictセレクタコール電位漏れなどとのdeallocでそれが
「参照カウントの不適切な減少が発信者がこの時点で所有されていない」状態- (id)init {
if (self = [super init]) {
[self setMyDict:[[NSMutableDictionary alloc] init]];
}
return self;
}
- (void)dealloc {
[[self myDict] release];
[super dealloc];
}
@synthesize myDict = _myDict;
私はこれを理解していません。私は、オブジェクトのinit ALLOCが増加すると、ワンによってカウントを保持し、ポインタが合成されたプロパティを介して_myDictに格納されていると、考え。私が代わりにこのコードを使用する場合は、
- (id)init {
if (self = [super init]) {
_myDict = [[NSMutableDictionary alloc] init];
}
return self;
}
- (void)dealloc {
[_myDict release];
[super dealloc];
}
Analyzerは文句はありません。私は何をしないのですか?
解決
@synthesizeはオブジェクトあなたのしている合成のためのセッターとゲッターをご提供しています。
Aセッターメソッドのルックス、このような何か(Apple社のドキュメントから取られた)
-(void)setMyDict:(NSMutableDictionary *)newDict {
if (myDict != newDict) {
[myDict release];
myDict = [newDict retain];
}
}
あなたが行うときは、リークを作成している。
[self setMyDict:[[NSMutableDictionary alloc] init]];
新しくalloc'd辞書を解放したことがないので。
この問題を回避する方法があります:
NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];
[self setMyDict:dict];
[dict release];
このリークの世話をする。
deallocメソッドで、あなたが使用する必要があります:
[myDict release]; // Or whatever your property is called.
所属していません StackOverflow