2014-01-15 72 views
9

我可以有一個靜態指針,在objective-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

謝謝,這對於你不知道爲什麼你的對象沒有被釋放的用例很有用。通過這種方式,您可以重用一個實例,而不是每次使用都泄漏一個新實例。當然,保持一個弱靜態變量是一個愚蠢的臨時修復,而不是一個解決方案。謝謝! –

相關問題