【问题标题】:Can I have a weak static pointer?我可以有一个弱静态指针吗?
【发布时间】:2014-01-15 21:04:52
【问题描述】:

我可以有一个在objective-c 中弱的静态指针吗?我知道它可以编译,但我想知道它是否会像我期望的弱指针那样运行。

__weak static HMFSomeClass *weakStaticPointer;

【问题讨论】:

  • 你可以很容易地测试它为什么不试试呢?而且我看不出它可能失败的任何原因(那么它不应该在没有警告的情况下编译)。
  • 我认为它的行为会像预期的那样,如果你将它分配给一个对象,你将能够通过这个静态指针访问该对象,只要该对象保留在其他地方。
  • 你有什么特别的理由想要一个弱静态指针?
  • TextEdit 有一个弱静态指针。我认为它是指向最近打开的文档的指针。
  • @Unheilig 我对接受的答案发表评论,这是一个非常糟糕的用例,可能会引起人们的兴趣。

标签: objective-c pointers static weak-references


【解决方案1】:

是的,它的行为就像一个适当的弱指针:

__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 中也找不到任何禁止的限制 一个静态的弱指针。

【讨论】:

  • 谢谢,这对于您不知道为什么您的对象没有被释放的用例非常有用。通过这种方式,您可以重用一个实例,而不是在每次使用时泄漏一个新实例。当然,维护弱静态变量是一种愚蠢的临时修复,而不是解决方案。谢谢!
猜你喜欢
  • 2013-08-24
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2015-12-05
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多