目的関数-cで弱い静的ポインタを使用できますか?私はそれがコンパイルされていることを知っていますが、弱いポインタが動作すると予想されるので、それが動作するかどうかを知りたいです。弱い静的ポインタを使用できますか?
__weak static HMFSomeClass *weakStaticPointer;
目的関数-cで弱い静的ポインタを使用できますか?私はそれがコンパイルされていることを知っていますが、弱いポインタが動作すると予想されるので、それが動作するかどうかを知りたいです。弱い静的ポインタを使用できますか?
__weak static HMFSomeClass *weakStaticPointer;
はい、適切な弱いポインタのように振る舞う:
__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のいずれかの制限を見つけることができません静的。
これは、オブジェクトがdeallocされていない理由がわからないユースケースに最適です。このようにして、それぞれのインスタンスで新しいインスタンスをリークする代わりに、1つのインスタンスを再利用することができます。弱い静的変数を維持することは、愚かな一時的な修正であり、もちろん解決策ではありません。どうも! –
あなたは簡単にそれを試してみてくださいそれをテストすることができますか?私はそれが失敗するかもしれない何らかの理由を見ることができません(それは警告なくコンパイルするべきではありません)。 –
私はそれがオブジェクトに割り当てられた場合、期待どおりに動作すると思います。そのオブジェクトが他の場所に保持されている限り、この静的ポインタを通じてオブジェクトにアクセスできます。 – Jack
弱い静的ポインタが必要な特別な理由はありますか? – Unheilig