2013-01-22 3 views
9

objective-cでは、私は静的変数(should?)がプログラムの存続期間中その値を保持していることを知っています。しかし、ポインタが格納されている場合は、がARCの中でと強くカウントされますか?私はそれに依存することができますし、そのインスタンスは決して私は静的変数に割り当てられた後に外出することを保証することはできますか?静的ポインタは強いポインタですか?

static ClassA* shared; 

-(id)init 
{ 
    if (self=[super init]) { 
     shared=self; 
    } 
    return self; 
} 

答えて

14

はい、それが割り当てられたら、それに頼ることができます。

Transitioning to ARC Release Notes状態:ARCの下

、強力なオブジェクト型のデフォルトです。

、その後:

__strongがデフォルトです。オブジェクトに強いポインタがある限り、オブジェクトは「生きている」ままです。

あなたのstaticポインターがオブジェクトを参照すると、それは「生きている」のままです。ポインタのスコープ(グローバルであれ、スタック上のポインタであれ、インスタンス変数であれ)は何の違いもありません。

+0

私は実際にこの静的ポインタを私のプロジェクトの一部のグローバルポインタとして使用しています(私はグローバル変数が悪いと知っていますが、...);もしそれがヒープに残っていたら、私はもうそれをしたくないときに、どうやってそれを取り除くことができますか?理想的には、ARCは、この変数を使用するコードがない場合には、割り当て解除されるかのように、この処理を行う必要があります。しかし、この静的変数は、不要になったときに変数 – lynnard

+0

@ yulan6248 'nil'をすべて混乱させるようです。 – JustSid

0

Singletonを実装するだけで、インスタンスをnilに設定すると削除できます。

+0

しかし、静的ポインタが強い場合は、シングルトンクラス自体ではそれをゼロにすることはできませんか?ですから、私はこのために専用のメソッドを作らなければなりません。 – lynnard

+0

ARCを使用している場合、あなたは本当にコレクションを気にしません。あなたがそれを使用していない場合、使用していたメモリは再利用されます。 – Rob

+1

私は混乱していると思います。静的変数が強いポインタの場合は、ARCが正しく割り当て解除するためには、それをnilに設定する必要があります。しかし、静的変数はシングルトンクラスにしか見えないので、シングルトンクラスの中でそれをゼロにしなければなりません...あるいは間違っていますか? – lynnard

関連する問題