2010-11-30 10 views
3

私はユーザー名をUserDefaultsに保存しました。何らかの理由で、私はいくつかの奇妙な行動を経験しています。NSUserDefaultsのオブジェクトが解放されていますか?

私は、ユーザー名に基づいてサーバーからいくつかのデータを取得して取り出すデータコントローラーを持っています。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

userID = [prefs stringForKey:@"username"]; 

これは、最初の数回のために正常に動作しますが、私はいくつかのランダムなものを行うとしようとすると、ビューを再ロードするために戻った後、それがクラッシュします。それは言う:

-[CFString retain]: message sent to deallocated instance 0x4b18ff0 

これはNSLogの行で停止しているので、これは奇妙です。誰もがこれを前に見たか、それが起こっているかもしれない理由を知っていますか?

答えて

6

あなたのユーザーIDをどのように定義しましたか?それが保持して属性を持つプロパティの場合は、あなたの文字列が自動的に保持されますこのよう

self.userID = [prefs stringForKey:@"username"];

を呼び出す必要があります。 stringForKeyから返される文字列は、自動解放されます。

+0

これは問題のようです。それはもはや崩壊していない。一言、私に頭痛を与えていたのはわずかな見落としのようだ。助けてくれてありがとうNava。 :) – gabaum10

+0

助けがあれば、正解としてマークしてください。ありがとう! –

+1

私はすぐに笑います。それはあなたが5分のように待つようにします。それはあまりにも速かった! ;) – gabaum10

0

stringForKeyは、保持していないautoreleaseオブジェクトを返します。おそらく、そのメソッドが終了するとすぐに解放されます。

手動で行うか、保持設定でプロパティ宣言を使用するかのいずれかで、その文字列を保持する必要があります。

そして、ある時点(少なくともdeallocで)から解放する必要があります。

+0

うん、それは私がしなければならなかったことだ。それが保持されていないことを認識していませんでした。明示的にself.userIDと言っていないため、保存されていませんでした。しかし、応答に感謝します。 – gabaum10

関連する問題