2011-06-30 10 views
1

私は非原子として宣言され、保持されるいくつかの日付と文字列を持っています。私は日付を設定するか、それが保持されていないself.stringを使用して文字列を変更self.stringはメモリリークの原因にならないiphone

。私が[string retain]で強制すると問題はありませんが、メモリリークが発生します。

どのようなアイデアや方法や何が間違っているのですか?

乾杯

更新:

@property (nonatomic, retain)NSDate *time; 
    self.time = [cal dateFromComponents:comps]; 

self.timeが保持されません。私はあなたがどちらか二度、文字列を解放するか、すでに解放された後、それをアクセスしている[time retain];

+0

あなたが試していることのいくつかのコード例を示す必要があります。 – dredful

+2

サンプルコードを提供する必要があります。プロパティを正しく使用していれば、それはすでにリリースされています。 – Joe

+0

なぜそれが保持されないと思いますか?実際には、正しく宣言されていれば実行されます。より多くのコードを表示する必要があります。 – Eiko

答えて

1

に持っています。いくつかのコードを投稿すると、それが十分でない場合には何が起こっているのかを判断するのに役立ちます。

+0

それだけでdealloc thouで解放された... – Dan

+0

それからあなたはいくつかのコードを投稿する必要があります。また、あなたが得ている正確なエラーメッセージは何ですか? – Jamie

+0

エラーはありませんが、再びnullを使用する場合 – Dan

0

シーケンスを考える:

 
0 NSObject *obj = [[NSObject alloc] init]; 
1 [obj retain] 
2 [obj retain] 
3 [obj release] 
4 [obj release] 
4 NSLog("@%@",obj); 

(OBJカウントが1である保持)漏れます配列はながら

 
0 NSObject *obj = [[NSObject alloc] init]; 
1 [obj retain] 
2 [obj release] 
3 [obj release] 
4 NSLog("@%@",obj); 
5 [obj retain] 

は、ライン4(objが割り当て解除された)でクラッシュします。

あなたは、同じ操作を見ることができますが、異なる順序で、あなたのオブジェクトがリークさに余分な割り当てが解除されてから変更することができたよう。

0

セッターとゲッターメソッドを合成しましたか?

@implementation YourClass 

実際に保持する方法が生成するものです:あなたが行の後にこの権利を行うだろう、

一般
@synthesize time; 

:彼らは、.mファイル内のコードの次の行を含めることによって合成されますあなたがそうであるように、あなたが、それを設定された変数は、中:

self.time = [cal dateFromComponents:comps]; 
+0

接頭辞が 'self'のオブジェクトはviewControllerのプロパティであるため、合成されています。 –

+0

これは正しくありません。プロパティはドット表記法(例えば 'self.time')のみを使用できますが、セッターとゲッターは合成しません。合成する場合は、明示的に行う必要があります。その後、それらはプロパティのルール(例えば、保持)に従って生成されます。さらに、プロパティは、ビューコントローラだけでなく、どのオブジェクトでも使用できます。 –

+0

viewControllerが例です。 –

0

今学ぶための最善のことは、楽器を使用して問題のこれらの種類の原因を見つける方法です。 Xcodeの4では

は、製品/プロフィールに行き、あなたのプロジェクトがコンパイルされ、楽器のウィンドウが表示されます。 Allocations計測器を選択し、RECボタンのように見える赤いボタンをクリックして自動的に実行を停止します。

Allocations楽器の前にある小さなiボタンをクリックします。 「レコード参照カウント」と「NSZombie検出を有効にする」を選択し、同じ赤いボタンをクリックして再度実行します。問題が再現され、クラッシュするとInstrumentsウィンドウに戻り、矢印をクリックして問題の原点を検索するダイアログボックスが表示されます。あなたはあなたのオブジェクトが間違ってリリースされた場所を見てください。

enter image description here

関連する問題