のような文字列リテラルを使用できますが@"content"
、メモリの無駄だと思います。この状況に対するカスタムソリューションはありますか?
私は新しいXcoderなので、これは良い質問ではないかもしれませんが、NSString
...の使用について非常に混乱しています。
のような文字列リテラルを使用できますが@"content"
、メモリの無駄だと思います。この状況に対するカスタムソリューションはありますか?
私は新しいXcoderなので、これは良い質問ではないかもしれませんが、NSString
...の使用について非常に混乱しています。
テキストをファイルに入れます。ファイルに名前を付けたとしましょうuserAgreement.txt
。ファイルがターゲットの一部であることを確認します(プライマリエディターでファイルを開いているときに、ファイルインスペクターの[ターゲットメンバーシップ]セクションを確認します)。
次のように、実行時にファイルの内容を読み取ります。
NSString *path = [[NSBundle mainBundle] pathForResource:@"userAgreement" ofType:@"txt"];
NSString *userAgreement = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
このアプローチの特徴は、ファイルをローカライズできることです。このコードは、ユーザーのロケールに適したバージョンを自動的に取得します。
カスタムエンドユーザー使用許諾契約書(EULA)を使用し、このアプリをApp Storeに配置する場合は、iTunesConnectのアプリ構成にEULAを入力する必要があることに注意してください。
他の答えが間違っていると言っているのではなく、おそらくそれは私が自分で行うことです(ファイルからEULAをロードする)。ただし、ファイルに保存する場合でも文字列リテラルに保存する場合でも、メモリを管理し、オブジェクトグラフを適切な方法で作成している限り、同じ量のメモリを使用することを明確にしたいと思います。
メモリ使用量が心配な場合でも、文字列リテラルにすることができます。独自の'myEula'クラスでプロパティとして定義し、文字列リテラルクラスを-initメソッドに配置し、手動参照カウントを使用している場合は、それが解放されることを確認してください。
次に、ユーザーに同意を示す必要がある場合は、myEulaクラスの新しいインスタンスを作成し、適切なプロパティにアクセスしてから解放するか、参照を削除してガベージコレクションを取得します。
EULAを表示するために使用していたViewControllerで定義することもできます。これは、おそらく短時間だけメモリに保持されます。純粋主義者は、これはmodel-view-controllerに違反していると言うでしょうが、テキストが不変である場合、それは大したことではないと思います。
メモリを浪費する唯一の方法は、アプリデリゲートのように、永続的にメモリにとどまるオブジェクト内の文字列リテラルとして定義されている場合、またはすべてのビューを常にメモリに保持している場合ですが、それはこの1つの文字列リテラルよりも大きな問題があることを意味している可能性があります。