在objective-c中,我知道静态变量(应该?)在程序的生命周期内保留其值。但如果它存储一个指针,它在 ARC中算不算强?我是否可以依赖它并确保一旦我将它分配给静态变量,该实例将永远不会离开堆?
static ClassA* shared;
-(id)init
{
if (self=[super init]) {
shared=self;
}
return self;
}
在objective-c中,我知道静态变量(应该?)在程序的生命周期内保留其值。但如果它存储一个指针,它在 ARC中算不算强?我是否可以依赖它并确保一旦我将它分配给静态变量,该实例将永远不会离开堆?
static ClassA* shared;
-(id)init
{
if (self=[super init]) {
shared=self;
}
return self;
}
是的,一旦分配,您就可以依赖它。
过渡到 ARC 发行说明状态:
在 ARC 下,strong 是对象类型的默认值。
接着:
__strong 是默认值。只要有一个指向它的强指针,一个对象就保持“活动”。
鉴于您的static
指针引用了该对象,它将保持“活动”。指针的范围(无论是全局的、堆栈上的指针还是实例变量)都没有区别。
看起来你应该只是实现一个Singleton,然后你可以通过将实例设置为 nil 来摆脱它。