Tom*_*ing 5 cocoa delegates objective-c
我最近才注意到,当一个对象尝试向其委托发送消息并且该委托已经被释放时,我的一个应用程序崩溃了.
目前,在调用任何委托方法之前,我运行此检查:
if (delegate && [delegate respondsToSelector:...]){
[delegate ...];
}
Run Code Online (Sandbox Code Playgroud)
但显然这并不能说明代表是否为零,但已被解除分配.
除了在委托dealloc方法中将对象的委托设置为nil之外,有没有办法检查委托是否已经被释放,因为我不再有对该对象的引用.
Chu*_*uck 16
不可以.无法判断变量是否指向有效对象.你需要构建你的程序,这样这个对象的委托就不会在不先让它知道的情况下消失.
我假设你没有使用GC.在这种情况下,标准约定是设置委托的代码负责nil在允许委托被取消分配之前设置委托用户的引用.如果您正在使用GC,则可以使用__weak委托的引用,允许垃圾收集器设置nil对实例进行垃圾回收的引用.