ios - ARC + Dealloc 不调用

标签 ios automatic-ref-counting dealloc

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

案例 1:当我使用 Storyboard中的所有 IBOutlet 时调用我的dealloc

案例 2:当我尝试在 UIViewController 中使用 allocinit 方法时,我的 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/

相关文章:

ios - 使用 block 和 ARC 导致 "message sent to deallocated instance"错误

iphone - 如何在不越狱手机的情况下使用私有(private) API 在 iOS 上运行后台进程来同步电子邮件项目

iOS 网络连接类型

objective-c - Objective-C ARC转换的几个问题

c++ - ARC 不允许隐式转换 Objective-C 指针

ios - 在IOS、ARC中,虽然引用计数降为0,但对象仍然没有被释放

Objective-C 释放类别中声明的属性?

swift - [UIActivityIndi​​catorView发布] : message sent to deallocated instance in swift-3

ios - APNS注册及其生命周期

ios - 为什么 XCode 启动应用程序两次以运行 UI 测试?