Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 静态指针是强指针吗?_Objective C - Fatal编程技术网

Objective c 静态指针是强指针吗?

Objective c 静态指针是强指针吗?,objective-c,Objective C,在objective-c中,我知道静态变量(应该?)在程序的生命周期内保持其值。但是如果它存储了指针,它在弧中是否算作strong?我是否可以依赖它,并确保一旦我将该实例分配给静态变量,它将永远不会退出堆 static ClassA* shared; -(id)init { if (self=[super init]) { shared=self; } return self; } 是的,一旦分配给你,你就可以信赖它 国家: 在“圆弧”下,“强”是对象类型的默

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

static ClassA* shared;

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

是的,一旦分配给你,你就可以信赖它

国家:

在“圆弧”下,“强”是对象类型的默认值

然后:

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


如果您的
静态
指针引用该对象,它将保持“活动”。指针的作用域(无论是全局指针、堆栈上的指针还是实例变量)都没有区别。

看起来您应该只实现一个,然后您可以通过将实例设置为nil来消除它。

我实际上在项目的一部分中将此静态指针用作全局指针(我知道全局变量是邪恶的,但是…); 如果它留在堆里,一旦我不再想要它,我怎么能把它扔掉呢?理想情况下,ARC应该注意这一点,就像没有使用此变量的代码一样,然后它将被解除分配;但是这个静态变量似乎会把一切都搞糟up@yulan6248
nil
当您不再需要变量时将其设置为零。但是如果静态指针是强指针,是否意味着我只能在singleton类本身中将其设置为零?因此,我必须为此制定一个专门的方法。如果你使用ARC,你并不真正关心收集。如果你把它设为零,它使用的内存就会被回收,对吗?我想我是糊涂了。如果静态变量是一个强指针,那么我需要将它设置为nil,以便ARC正确地解除锁定它;但是由于静态变量只对singleton类可见,我必须在singleton类内部将其置零……或者我错了吗?是的,你必须从内部将其置零,就像有一个方法:“deactivate”或其他什么,然后如果有人再次请求引用,它将重新创建它。