handle when callback to a dealloced delegate?

冷暖自知 提交于 2019-12-19 04:18:11

问题


I implemented the delegate-callback pattern between two classes without retaining the delegate. But in some cases, the delegate is dealloced.

(My case is that I have a ViewController is the delegate object, and when the user press back button to pop that ViewController out of the NavigationController stack)

Then the callback method get BAD_EXE:

if (self.delegate != nil && [self.delegate respondsToSelector:selector]) {
    [self.delegate performSelector:selector withObject:self withObject:returnObject];
} 

I know the delegate-callback pattern is implemented in a lot of application. What is your solution for this?


回答1:


Generally, a delegate should always deassociate it from its delegating object in its dealloc method. So your view controller should check in its dealloc whether it is set as the delegate of the delegating class, and if so, set the delegate property to nil.

In most cases, I would imagine this would not be a problem because very often the delegate is the sole owner of the delegating object. So when the delegate gets deallocated, the delegating object would get deallocated too. After all, this is the reason that delegating objects usually only hold weak references to their delegates.




回答2:


I have no objective-c knowledge, but I would think that you need to test for self.delegate != nil separately e.g

if (self.delegate != nil)
{
 if ( [self.delegate respondsToSelector:selector]) 
 {
    [self.delegate performSelector:selector withObject:self withObject:returnObject];
 }
}

Oh and it's best to reassign the delegate if it is nil.



来源:https://stackoverflow.com/questions/2720087/handle-when-callback-to-a-dealloced-delegate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!