自分のiPhoneアプリケーションでは、値を格納するためにnsstring変数をいくつか使用しています。しかし時々その価値は無効になります!誰かが理由を知ることができますか?または、nsstring変数が無効になる状況を教えてください。NSStringが無効になることがありますか?
答えて
はあなたにやったコピーまたはが NSStringのを保持?
これらは自動リリースされています。便利なメソッド(stringWithString、stringWithFormat)を使用して文字列を作成すると、自動解放プールに追加されます。
メモリが解放されるように使用を終了すると、自動的に解放されるのを止めるには、保持メッセージと解放メッセージを送信します。また、メンバー変数に文字列を割り当てるときに半自動的に行うプロパティを設定することもできます。
SOおよびインターウェブ上のiPhone(およびMac)メモリ管理に関する記事がたくさんあります。 Googleが自動解放を行います。
NSString
もオブジェクトです。彼らは同じメモリ管理ルールを使います。これらのルールに対して罪を犯すと、無効なメモリへのポインタが得られ、 "無効な"データのように見えます。例えば
:
myString = [NSString stringWithString:@"foo"];
これは、自動解放に持ってNSString*
を作成します。あなたがそれを参照している間に、自動解放プールがすぐに0に戻って保持カウントを入れて、dealloc
を送信しているivarに割り当てるときに!
いたずら。
myString = [[NSString alloc] initWithString:@""];
これは所有参照を返す:
代わりに、または使用を保持するいずれか。 [myString release];
をdealloc
に覚えておいてください。
これは、不良メモリ管理の1つの例です。オブジェクトライフサイクルを適切に管理する方法に関するドキュメントを読んでください。本当に。
iPhoneのようにリソースがかなり限られているデバイスの場合は、静的な便利な方法よりも[[NSString alloc] init*]
を使用する必要があります。自動解放プールを少なくしてメモリ使用量を減らすからです。プールはメッセージループごとに排水されるので、列挙するオブジェクトが少なくなります。
ローカルの自動解放プールを管理しない限り、ループ内の自動解放オブジェクトは多くのゴミを生成することにも注意してください。
私は同じ質問をしました。そして、以下の答えは利便性の良さでした。ただ、使用:
[myString retain];
そしてdeallocメソッド(例えばviewDidUnload)に:
[myString release];
- 1. この無効なポインタはどこにありますか?
- 2. Djangoなぜurls.pyのこの行に無効な構文がありますか?
- 3. SQL - 無効な識別子ですが、どこにありますか?
- 4. 実際に有効なときにパスワードが無効であると言う場合があります
- 5. フォームが無効なときにボタンを無効にする方法はありますか?
- 6. Cプリプロセッサ/マクロに無効な文字がありますか?
- 7. Youtube API(無効なリクエスト)に問題がありますか?
- 8. RangeError:無効なステータスコード:ノードに0のエラーがありますか?
- 9. foreachの無効な引数に問題がありますか?
- 10. 右クリックが無効になることを無効にします。
- 11. NSStringプロパティが無効な値に変更されるのはなぜですか?
- 12. ボタンを無効にするとホバーが無効になります
- 13. 無効なPathExpressionはStateFieldPathExpressionである必要があります
- 14. SendFailedException:無効なアドレス - 例外に無効なアドレスがありません
- 15. AVPlayer Observerが無効なURLを呼び出すことはありません
- 16. CORSを無効にする必要がありますか?
- 17. サービスブローカがRESTORE DATABASEよりも無効になる理由はありますか
- 18. 割り込みを無効にするとCPUスケジューリングが自動的に無効になりますか?
- 19. Netbeansによって実行ボタンが無効になることがあります
- 20. JavaScriptの日付関数から無効な日付が表示されることがあります
- 21. ネイティブのapp要素が無効になっていることを示す属性はありますか?
- 22. この証明書には無効な発行者があります
- 23. ブラウザでJavaScriptを無効にするとjQueryに影響がありますか?
- 24. ZendはこのURIが無効であると言います
- 25. エラー:パスに無効な文字があります
- 26. 入力ストリームに無効な文字があります
- 27. SAMLException:応答に無効なステータスコードステータスメッセージがあります
- 28. PNGファイルに無効な署名があります
- 29. フォルダ名の末尾に無効な文字があります
- 30. GeoFireデータに無効なフォーマット例外があります
ああ、あなたはパンチに私を打つ持っているように見えました。とにかく、あなたはおそらく "それが解放されたことを止める"ことを望んでおり、自己を使わない限り、プロパティは保持/解放しません。property = fooの代わりにproperty = foo;その区別を明示的に追加すると良いかもしれません。 – lhunath