• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 调用[super dealloc]和调用父类(super class)的方法实现的区别

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:49:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

调用 [super dealloc] 和从父类(super class)获取 IMP 并调用它有什么区别?

Method deallocMethod = class_getInstanceMethod([self superclass], @selector(dealloc));
IMP superImp = method_getImplementation(deallocMethod);
((void (*)(id, SEL))superImp)(self, _cmd);

根据我使用的内容,我会得到两种不同的行为。我在 UIViewController 的动态子类中看到了这种不同的行为。

编辑:

详细说明。我没有使用 ARC。

行为上的差异也很难描述,但我会尽力而为。似乎 UIViewController 在 dealloc 中所做的一些清理工作尚未完成。如果我只调用 [super dealloc] 我会收到一条消息发送到 View Controller 的已释放实例。当它在 UIViewController (+[UIViewController setViewController:forView:]) 的静态函数中为 View (我不完全理解的内部内容)增长 View Controller 的哈希时,就会发生这种情况。我的猜测是,在我只调用 [super dealloc].

的情况下, View Controller 不会从哈希中删除



Best Answer-推荐答案


您不会在 ARC 中调用 [super dealloc]。否则两者相同。

关于ios - 调用[super dealloc]和调用父类(super class)的方法实现的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406983/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap