2012-04-09 5 views
0

私は機器のリークツールを使用しています。私はinitメソッドでいくつかのリークがあると言います。 NSMutableArrayにリークがあることを示しています。initにいくつかのリークがあります。私は誰のリークも見ない

私には漏れはありません。

@interface BookSettings : NSObject 
    @property (nonatomic, retain) NSString *title; 
    @property (nonatomic, retain) NSMutableArray *authors; 
@end 

- (id)init 
{ 
    self = [super init]; 

    if(self) 
    { 
    title   = [[NSString stringWithString:@""] retain]; 
    authors   = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
[title release]; 
[authors release]; 
[super dealloc]; 
} 

答えて

2

提供されたコードがOKである著者は、バランス解除せずに保持された場合、問題がどこかにあります。漏れは、欠落しているリリースが存在する場所ではなく、ivarが作成された場所を指し示します。保持回数が増えた場所をすべて確認してください。

あなたが保持し、リリースおよび自動解放オブジェクトの使用機器で発生場所を確認する必要がある場合:楽器で

実行]を、割り当てに(このオプションを設定するには、記録を停止しなければならない上に「レコードの参照カウント」を設定)。問題のコードを実行し、録画を停止し、関連するivarを検索し、ドリルダウンして、すべての保持、リリース、および自動リースが発生した場所を確認することができます。

真剣にARCを使用することを検討して、ARCは、iOS搭載4.xに戻ってサポートしない理由はほとんどありません

はところで:

title = [[NSString stringWithString:@""] retain]; 

は、よりコンパクトに書くことができます。

title= @""; 
+0

ASIHHTPなどのライブラリを使用していますが、ARCをサポートしていません。それで私はARCを使わないのです。 – Voloda2

+0

ARCはファイル単位で使用できますが、私はあなたの問題を理解しています。 – zaph

0

タイトルからだと思います。 あなたはすでに、そのプロパティは非アトミック持って保持するので、これは、あなたが一度それを解放する、にdeallocでは、カウント2

を保持すること、そして、あなたは別の保持指定1.

のカウントを保持減らす意味します保持数は1になります。したがって、文字列を保持し続けるこの1リファレンスはリークです。あなたはとにかくそのような文字列を初期化している理由を私は理解していない

...

+0

はい、シンプル: 'タイトル= @ "を";'すべてのことが必要とされています。 – zaph

+0

これは「著者」にも当てはまると思います。 NSLogはdealloc NSLog( "count%i /%iを保持する"、[title retainCount]、[authors retainCount])の作成者とタイトルの両方の保持カウントをリリース直前に表示しています。 – BBog

+0

retainCountは使用しないでください。期待することはほとんどありません。より良い方法があります。親戚で考えると、増加はバランスをとる必要があります。 bbumの[retaincount is useless](http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/)を参照してください。最高:ARCを使用してください! – zaph

関連する問題