我有点困惑,因为我的dealloc没有在ARC调用。我在我的应用程序中使用了storyboard。
案例1:当我使用故事板中的所有dealloc
时,我的IBOutlet
被调用
案例2:当我尝试在dealloc
中使用alloc
和init
方法时,我的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
?
由于
答案 0 :(得分:1)
ARC的概念是对象的保留计数理论上应为1,以便将其解除分配。执行时:
[self.view addSubview:detailview];;
self.view
增量detailview
在将其添加到view.subviews
时保留计数为1。逻辑上,当self.view
删除detailview
时,保留计数减1。
同样,这是一个理论视角。现实通常是:
没有人真正知道神秘的Objective-C运行时是如何工作的! (开玩笑可以在网上找到完整的源代码。)
答案 1 :(得分:0)
感谢您的回复。当视图控制器弹出时,我可以调用我的dealloc函数。为实现这一目标,我们需要在用户点击后退按钮时从我的视图中删除我添加的子视图。