0

私のアプリでは、あるクラスから別のクラスにNSMutableStringを渡す必要があるので、それをexternに配置します。問題は、アプリを実行すると、クラスが文字列にアクセスするのは1回だけで、2回目はアプリがクラッシュすることです。明らかに、NSMutablStringは最初のアクセス後にnilになりました。だから私は何かを理解しようとしました:私は文字列をC文字に変換しました。今回はアプリがクラッシュしませんが、charの値は呼び出すたびに変わります!! 本当に混乱しています:知っておく必要があります

  1. NSMutablStringの値を維持して、クラスが呼び出すたびに使用できるようにする方法はありますか?
  2. charの値が変化する原因は何ですか?

助けてくれてありがとう

4

1 に答える 1

1

本当に奇妙なことをしているようですね。

  • NSMutableStringインスタンスをあるオブジェクト(ソース)から別のオブジェクト(ターゲット)に渡す場合は、それをターゲットオブジェクトのプロパティに割り当てるか、メソッド呼び出しを介して渡す必要があります。

  • ターゲットオブジェクトは、ソースオブジェクトの動作に関係なくインスタンスが有効であることを保証するために、このインスタンスを(明示的に、またはプロパティの「retain」フラグを使用して)保持する必要がありますターゲットオブジェクトは、不要になったときにも解放する必要があります。そうしないと、メモリリークが発生します。

  • 「NSMutableString(ポインタ)がnilになる」ことはあまり明白ではありません。無効な参照があると、nilだけでなく、参照を解除するとクラッシュする可能性があります。実際、私の推測では、削除されたオブジェクトにアクセスしようとしていると思います。

  • [NSMutableString cStringUsingEncoding:]または同様のメソッドを使用してcharポインターを取得したと思います。返されたポインタは期間限定で有効であることに注意してください。ドキュメントを確認してください。

とにかく、これはすべてかなり基本的なものです。メモリ管理プログラミングガイドを読み、すべてを理解していることを確認する必要があります。安定したObjective-Cコードを開発することは単に不可欠です。

于 2011-04-27T22:27:34.353 に答える