1

でメモリリークが発生しましたが、機能stringWithCStringでメモリリークを見つけられる人はいstringWithCstringますか?

SomeView *detailViewController = [[SomeView alloc] initWithNibName:@"SomeView" bundle:nil];
detailViewController.test = [NSString stringWithCString:"abc" encoding:UTF8_ENCODING];

テスト変数のSomeViewのプロパティは

@property (nonatomic,copy) NSString* test;

私の財産は正しく宣言されていますか?

4

2 に答える 2

1

[SomeView dealloc]次のように、メソッドで文字列を解放していますか?

- (void)dealloc
{
    self.test = nil;
    [super dealloc];
}
于 2012-07-14T10:11:51.343 に答える
0

リークを「検出」するために使用するものは何でも、それはどの程度信頼できますか?

今までプロパティを使用したことはありませんが、上記のコードはかなり正しいように見えます。文字列は解放されるはずです。「stringWithCString:」はとにかく文字列を自動解放するので、問題はありません。ただし、プロパティの「コピー」は、文字列のコピーを作成することを示しているようです(え?サプライズ!)。所有するオブジェクトが死んだときにオブジェクトタイプのプロパティが解放されると仮定しても、所有するオブジェクトの場合決して死ぬことはなく、コピーされた文字列は決して解放されません。

おそらく、メモリリーク検出器は、「detailViewController」を解放するのを忘れたために、その文字列のコピーが解放されないことを意味しているのでしょうか。そのコピーは同じソースコード行にあるため、メモリリーク検出器が正確な位置を示しても、行番号しか提供されない場合でも、誤解される可能性があります...

于 2012-07-14T09:57:01.767 に答える