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是默认值。只要有指向对象的强指针,对象就会保持“活动”


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

是的,一旦分配了指针,您就可以依赖它了

国家:

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

然后:

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


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

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

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

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