不调用ARC + Dealloc

时间:2015-02-06 12:57:55

标签: ios automatic-ref-counting dealloc

我有点困惑,因为我的dealloc没有在ARC调用。我在我的应用程序中使用了storyboard。

案例1:当我使用故事板中的所有dealloc时,我的IBOutlet被调用

案例2:当我尝试在dealloc中使用allocinit方法时,我的UIViewController未被调用。如下。

 UIViewController *vc = [[UIViewController alloc] initWithNibName:@"ProfileDetailView" bundle:nil];
        __weak ProfileDetailView *detailview = (ProfileDetailView *)vc.view;
        detailview.backgroundColor = [UIColor clearColor];
        vc = nil;
....Set value in object.....

[self.view addSubview:detailview];;
        detailview = nil;

你能解释一下为什么没有调用dealloc吗?以及如何才能实现呼叫dealloc

由于

2 个答案:

答案 0 :(得分:1)

ARC的概念是对象的保留计数理论上应为1,以便将其解除分配。执行时:

[self.view addSubview:detailview];;

self.view增量detailview在将其添加到view.subviews时保留计数为1。逻辑上,当self.view删除detailview时,保留计数减1。

同样,这是一个理论视角。现实通常是:

INSANE。

没有人真正知道神秘的Objective-C运行时是如何工作的! (开玩笑可以在网上找到完整的源代码。)

答案 1 :(得分:0)

感谢您的回复。当视图控制器弹出时,我可以调用我的dealloc函数。为实现这一目标,我们需要在用户点击后退按钮时从我的视图中删除我添加的子视图。