Ios 此委托属性是否被强引用?

Ios 此委托属性是否被强引用?,ios,objective-c,automatic-ref-counting,weak-references,retain-cycle,Ios,Objective C,Automatic Ref Counting,Weak References,Retain Cycle,我的一个名为ArticleViewController的VCs出现问题。从不调用dealloc方法,当视图打开和关闭三次时,有三个VCs处于活动状态 我阅读了以下内容(当您的ViewController中有一个保留周期时,这是一个很好的来源!): 如果你使用 someObj.delegate = self; 在视图控制器内,检查someObj上的委托属性是否为weak @property (nonatomic, weak) id delegate; 我的VC中的一个代码片段是: PopVie

我的一个名为
ArticleViewController
的VCs出现问题。从不调用
dealloc
方法,当视图打开和关闭三次时,有三个VCs处于活动状态

我阅读了以下内容(当您的ViewController中有一个保留周期时,这是一个很好的来源!):

如果你使用

someObj.delegate = self;
在视图控制器内,检查
someObj
上的委托属性是否为
weak

@property (nonatomic, weak) id delegate;
我的VC中的一个代码片段是:

PopViewController *pop=[[PopViewController alloc] initWithNibName:@"PopViewController" bundle:nil];
pop.delegate = self;
因此,如果属性弱,我将签入
PopViewController.h

@property (nonatomic, assign) id <PopViewControllerDelegate> delegate;

您应该将其更改为
<代码>分配是基本类型的默认值,应该由基本类型使用
id
是一个对象,因此它应该是
——在本例中是
,因为不应该增加引用计数器

您可以在这里阅读有关
strong
/
/
分配的更多信息,就我所知,这是一个很好的解释:

很高兴看到这对您来说是一个重要的案例,因为很多人即使在Obj-C中不是很新,也只是“跳过”了这个问题,然后遇到了内存问题

--编辑--

也许你的内心有任何阻碍,而你在内心保持着强烈的自我暗示?有急件吗?也许您在另一个控制器上拥有此控制器的属性,这就是它仍然存在的原因?

来自:

分配
几乎是一样的,因为它不会增加对象的保留计数,因此它不能成为保留周期的来源

的区别在于,当解除分配指向的对象时,
指针本身将
为零
,但
分配
(或
不安全
未恢复)指针仍将指向空闲内存,导致下次尝试解除引用时崩溃


tl;dr:您可以保留
assign
,它不是内存问题的根源,但是使用
weak
更安全,并且会产生更少的崩溃(因为消息
nil
是不可操作的).

应将
assign
更改为
weak
,但
assign
不会导致参考循环,因为
assign
不会增加参考计数。你肯定有其他原因导致引用周期。你实际上没有回答这个问题:“既然强是默认值,这里没有明确的弱,这会导致我的保留周期吗?”如果
assign
没有增加引用计数,而
strong
增加了引用计数,那么怎么可能(根据答案中的链接)
strong
assign
都是默认值吗?它们不是相互排斥的吗?@physicalattraction
strong
是对象(
id
是对象)的默认值,
assign
是基元类型(
int
等)的默认值。@rmaddy你说得对,我错了。当我进入id设置为赋值的部分时,我只是跳过了问题的其余部分,键入了答案,甚至没有看到那一行。很高兴看到你在评论中提到了这个问题。尽管如此,我还是希望我的回答在这里有所帮助,因为它涉及到问题的基础。
@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;