0

楽器のリークツールを使用しています。initメソッドにリークがあるとのことです。NSMutableArrayにリークがあることを示しています。

漏れは見られません。

@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];
}
4

2 に答える 2

2

提供されたコードはOKです。問題は、バランスの取れたリリースなしで作成者が保持される別の場所にあります。リークは、欠落しているリリースがあるべき場所ではなく、ivarが作成された場所を指しているだけです。保持カウントが増加しているすべての場所を確認してください。

オブジェクト使用インスツルメントの保持、リリース、および自動リリースが発生する場所を確認する必要がある場合は、次のようにします。

機器で実行し、[割り当て]で[参照カウントの記録]をオンに設定します(オプションを設定するには、記録を停止する必要があります)。問題のあるコードを実行し、記録を停止し、関心のあるivarを検索し、ドリルダウンすると、すべての保持、リリース、および自動リリースが発生した場所を確認できます。

ARCの使用を真剣に検討してください。そうしない理由はほとんどありません。ARCはiOS4.xに戻ることをサポートしています。

ところで:

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

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

title= @"";
于 2012-04-09T13:01:04.760 に答える
0

タイトルからだと思います。非アトミックな保持というプロパティが既にあるので、これは保持カウントが 1 であることを意味します。

次に、別の保持を指定して、保持カウントを 2 にします。

dealloc では、一度解放して、保持カウントを 1 に減らします。したがって、文字列を保持し続けるこの 1 つの参照がリークです。

とにかくそのような文字列を初期化する理由がわかりません...

于 2012-04-09T10:40:58.187 に答える