2012-04-17 4 views
0

私はメモリについての質問があります。コード&以下によると、漏れは0x6868190ですか?objective-cメモリリーク?

コード:

self.point = [NSString stringWithFormat:@"R"]; 
NSLog(@"********First********%d",[point retainCount]); 
NSLog(@"********First********%p",point); 
self.point = [NSString stringWithFormat:@"A"]; 
NSLog(@"********Second********%d",[point retainCount]); 
NSLog(@"********Second********%p",point); 

ログ:

2012-04-17 20:27:49.838 test_[297:f803] ********First********2 
2012-04-17 20:27:49.838 test_[297:f803] ********First********0x6868190 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********2 
2012-04-17 20:27:49.839 test_[297:f803] ********Second********0x6879500 
+0

あなたの投稿にコードの書式を追加してください。 – mit3z

+5

保持カウントを記録してメモリ管理を理解しようとすると、間違っています。 –

+1

@ MikeWellerのコメントを誇張することはできません。保持カウントについて忘れてしまったら、それはあなたが思っていることをしません。アップル社の文書によれば、「この方法で有益な情報を得ることはほとんどできない」 – sosborn

答えて

1

メモリリークを調べるには、Instrumentsを使用してください。保持カウントがゼロでないという事実(または私があなたが1を期待していたと思います)が、必ずしも漏れがあるということを意味しません。これらのオブジェクトは、必要に応じて実行ループの最後に解放されます。

stringWithFormatを呼び出すと、保持カウント1(自動的に解放されます)のオブジェクトが作成されます。あなたのプロパティはおそらくretain/strongと宣言され、メインオブジェクトが解放されたときに解放されるものが追加されます。したがって、2つです。

+0

私を助けてくれてありがとう!私はさらに理解しています。 – user1297301

0

NSStringクラスによって生成されたこれらNSString sはautorealeasedあります。

2

メモリーリークのチェックにはretainCountを使用しないでください。内側の実装では期待しないように変更する可能性があるためです。

xcodeには漏れをチェックするための適切なツールがありますので、私はあなたにそれを使用するようアドバイスします。

1

マイウェブサイト「When to use retainCount?」でこれをカバーしています。質問7と8を参照してください。

しかし要約すると、あなたの変数はオートリリースされているため、漏れていません(deallocでのリリースを忘れる場合を除きます)。