2014-01-15 7 views
9

目的関数-cで弱い静的ポインタを使用できますか?私はそれがコンパイルされていることを知っていますが、弱いポインタが動作すると予想されるので、それが動作するかどうかを知りたいです。弱い静的ポインタを使用できますか?

__weak static HMFSomeClass *weakStaticPointer; 
+0

あなたは簡単にそれを試してみてくださいそれをテストすることができますか?私はそれが失敗するかもしれない何らかの理由を見ることができません(それは警告なくコンパイルするべきではありません)。 –

+0

私はそれがオブジェクトに割り当てられた場合、期待どおりに動作すると思います。そのオブジェクトが他の場所に保持されている限り、この静的ポインタを通じてオブジェクトにアクセスできます。 – Jack

+0

弱い静的ポインタが必要な特別な理由はありますか? – Unheilig

答えて

15

はい、適切な弱いポインタのように振る舞う:

__weak static NSObject *weakStaticPointer; 

int main(int argc, char * argv[]) 
{ 
    @autoreleasepool { 
     NSObject *obj = [NSObject new]; 
     weakStaticPointer = obj; 
     NSLog(@"%@", weakStaticPointer); 
     obj = nil; // object is deallocated -> weak pointer is set to nil 
     NSLog(@"%@", weakStaticPointer); 
    } 
    return 0; 
} 

出力:

<NSObject: 0x100106a50> 
(null) 

また、私がする 弱いポインタを禁じClang/ARC documentationのいずれかの制限を見つけることができません静的。

+0

これは、オブジェクトがdeallocされていない理由がわからないユースケースに最適です。このようにして、それぞれのインスタンスで新しいインスタンスをリークする代わりに、1つのインスタンスを再利用することができます。弱い静的変数を維持することは、愚かな一時的な修正であり、もちろん解決策ではありません。どうも! –

関連する問題