ios 通知注销_IOS释放自注销模式设计

日常开发中,我们经常会注册一些通知、发起一些请求,当我们不需要时应及时注销通知,取消掉请求。否则,就有可能产生问题或者崩溃。比如我们会在控制器的viewDidLoad里面注册一些通知,然后在dealloc里面注销掉通知。或者当我们退出控制器时,将所有的当前发起的请求都Cancel掉。这在MRC开发下是非常常见的,因为请求返回时,回调代理时可能为野指针。这种手动注销的方式有些繁琐,开发中经常会遗忘导致问题被隐藏起来。正因为如此,我们希望可以提供一种架构去自动解决此类注销通知、取消请求的调用。

分析这个场景可以发现,这些通知的观察者以及请求,它们的生命周期是依赖于某个宿主的。当某个宿主对象销毁时,观察者以及请求也会被销毁。也就是自动调用注销的时机确定在对象释放时dealloc。同时,我们不应该对宿主的类型有特殊的要求,宿主可能是控制器,某个自定义控件,或者数据模块,即宿主要求是NSObject类型的对象。另外,我们希望可以自定义注销时的操作,比如是注销事件观察,或者是取消请求。以上是对这个架构最基本的要求,此外我们还有一些更高的要求,希望架构对性能的影响尽可能的小,避免产生一些循环引用的问题,使用要简单,最好有一些管理功能。

相对于其他需求点,捕获NSObject对象释放的时机是最为关键的需求。通常我们会想到使用Method Swizzling的方式,替换NSObject的dealloc方法。但这里有几个问题需要注意。

1、ARC开发下,dealloc作为关键字,编译器是有所限制的。会产生编译错误“ARC forbids use of 'dealloc' in a @selector”。不过我们可以用运行时的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值