私は、iOSのメモリ管理に関するいくつかの基本的な理解が不足していると確信しています。iOSシングルトンとメモリ管理
私は、現在サインインしているユーザーに関する情報、複数のView Controllerからアクセスされた情報など、私のアプリでシングルトンを使用しています。アプリ全体で取得および設定される複数のivarsがあります。
@property (non atomic, retain) NSString *myString;
と実装にsynththesized:
NSString *myString;
と作られていますので、同様に保持:そうは次のように彼らは.hファイルで宣言され、有産ています。
私が取得し、このようにシングルトンにする方法でそれらの値を設定します。私はシングルトン含む他の場所で
myString = @"value";
と
methodLocalString = myString;
- あるCurrentUserそれを呼び出すを - Iインポートする:
#import "CurrentUser.h"
シングルトンの外側このようにそれを設定します。値が
[CurrentUser sharedCurrentUser].myString = @"Bob";
、これは素晴らしい作品の時間のほとんど
myOutsideString = [CurrentUser sharedCurrentUser].myString;
は、適切に1が取得または別の設定から持続しました。問題は、時々私がそれらを得るときに、私は彼らがリリースされたことを知っている(アプリケーションをクラッシュさせる)、NSZombieEnabledは感謝して私に教えてくれます。
私が得意としないことは、彼の起こりうることです。シングルトンがリリースされていないと思ったので、シングルトンの保持された特性は決して解放されませんでした。この問題は、NSDateなどの非実在オブジェクトのプロパティや、保持できないintやBOOLなどのオブジェクトの明確なプロパティでは一般的ではないようですが、オブジェクトのプロパティでも同様に発生します。
私はここで何を知らないのですか?そして、あなたの忍耐力に感謝します。
良い質問です。明確化を待っている。 – harshalb
'NSString'プロパティで' retain'を使わないでください。 'copy'を使います。 –
not on copyに感謝します。これは、NSCopyingをサポートするすべてのオブジェクトに適しているはずです。 –