0

RestKitを使用してRESTfulアプリケーションを開発しています。私は実際に要求を処理し、RKObjectManagerdelegateとして機能するラッパーオブジェクトを持っています。 ARCがインスタンス変数を処理して保持する方法に関する問題が発生していますが、ARCがどのように動作するのか分かりません。ARCでのインスタンス変数の保持と同等

だから私はこれを行うとき、それは(割り当て解除インスタンスに送信されたメッセージに関連するエラーで)

MyTestClient *testClient = [[MyTestClient alloc] init];

を失敗したが、私はプロパティを宣言し、これを行うと、すべてが細かいです:

self.testClient = [[MyTestClient alloc] init];

私が理解しているところでは、ARCのインスタンス変数はデフォルトで常にstrongですが、ライフサイクルは宣言されているメソッドの範囲です。

私は[testClient retain]を行うことができないので、それをプロパティにする唯一の選択肢ですか?

答えて

5

変数はデフォルトでは強く、スコープ内に保持されます。したがって、最初の例では、オブジェクトは関数の最後まで保持されます。 2番目の例では、インスタンス変数があるため、所有オブジェクトの割り当てが解除されるまで保持されます(おそらくこの場合は十分に長くなります)。あなたの最善の選択肢はプロパティにすることですが、インスタンス変数にすることもできます。この場合、あなたのために同じことが行われます。

あなたがオブジェクトを必要としなくなるまで、オブジェクトへの強いポインタを置く必要があるという単純な考え方です。

+0

基本的に、ARCは変数の範囲についてある仮定をしなければならないので、何らかの形で(プロパティ、メンバ変数などを介して)必要とするどこでも利用できるようにする必要がありますか? –

+0

正確です。 ARCにはいくつかの優れたリソースがあります。私はそれを読むことをお勧めします。ほとんどの場合、ARCを使用してメモリを心配する必要はありませんが、舞台裏で何が起こっているのかを理解するのに役立ちます。 – wbyoung

0

ARCでの保持に相当するのは、それを指すポインタを持つことです。オブジェクトを指し示すものがあれば、そのオブジェクトは生きていきます。したがって、プロパティ、インスタンス変数、それらのオブジェクトを指すインスタンスさえ使用することができます。

Like wbyoung said。 testClientは起動した場所の中でのみ生きているので、これはviewdidload、init、またはw/eなので、エラーが出ます。

関連する問題