9

在objective-c中,我知道静态变量(应该?)在程序的生命周期内保留其值。但如果它存储一个指针,它在 ARC中算不算强?我是否可以依赖它并确保一旦我将它分配给静态变量,该实例将永远不会离开堆?

static ClassA* shared;

-(id)init
{
   if (self=[super init]) {
       shared=self;
   }
   return self;
}
4

2 回答 2

16

是的,一旦分配,您就可以依赖它。

过渡到 ARC 发行说明状态:

在 ARC 下,strong 是对象类型的默认值。

接着:

__strong 是默认值。只要有一个指向它的强指针,一个对象就保持“活动”。

鉴于您的static指针引用了该对象,它将保持“活动”。指针的范围(无论是全局的、堆栈上的指针还是实例变量)都没有区别。

于 2013-01-22T23:39:00.777 回答
0

看起来你应该只是实现一个Singleton,然后你可以通过将实例设置为 nil 来摆脱它。

于 2013-01-23T00:10:48.950 回答