我有点困惑,因为我的 dealloc 没有在 ARC 中调用。我在我的应用程序中使用了 Storyboard。
案例 1:当我使用 Storyboard中的所有 IBOutlet
时调用我的dealloc
案例 2:当我尝试在 UIViewController
中使用 alloc
和 init
方法时,我的 dealloc
没有被调用.如下所示。
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
?
谢谢
最佳答案
ARC 的概念是一个对象的保留计数 理论上应该为 1 以便它被释放。当你执行时:
[self.view addSubview:detailview];;
当 self.view
添加到 view.subviews
时,它会将 detailview
的保留计数加 1。从逻辑上讲,当 self.view
删除 detailview
时,保留计数减 1。
同样,这是一个理论的观点。现实通常是:
疯狂。
没有人真正知道神秘的 Objective-C 运行时是如何工作的! (开个玩笑,整个源代码都可以在线获得。)
关于ios - ARC + Dealloc 不调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28366347/