Objective c 我可以有一个弱静态指针吗?

Objective c 我可以有一个弱静态指针吗?,objective-c,pointers,static,weak-references,Objective C,Pointers,Static,Weak References,我可以有一个在objective-c中较弱的静态指针吗?我知道它是编译的,但我想知道它是否会像我期望的弱指针那样运行 __weak static HMFSomeClass *weakStaticPointer; 是的,它的行为就像一个适当的弱指针: __weak static NSObject *weakStaticPointer; int main(int argc, char * argv[]) { @autoreleasepool { NSObject *obj

我可以有一个在objective-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)

(空)
此外,我也找不到任何禁止的限制
弱指针是静态的。

您可以很容易地测试它,为什么不试试呢?我看不出它失败的任何原因(那么它不应该在没有警告的情况下编译)。我认为它会按照预期运行,如果您将它分配给一个对象,只要该对象保留在其他位置,您就可以通过该静态指针访问该对象。是否有任何特定原因需要弱静态指针?TextEdit具有弱静态指针。我认为这是指向最近打开的文档的指针。@Unheilig我对接受的答案发表了评论,这是一个非常糟糕的用例,可能会引起兴趣。谢谢,这对于您不知道为什么您的对象没有被释放的用例来说非常好。这样您就可以重用一个实例,而不是每次使用都泄漏一个新实例。当然,维护一个弱静态变量是一个愚蠢的临时解决方案,而不是一个解决方案。谢谢!