我有一个使用NSURLConnection打开与服务器的长期连接的类。当连接关闭时,无论是在connectionDidFinishLoading:还是在connection:didFailWithError:中,我要等待15秒,然后重试连接。

目前,我正在使用[self performSelector:@selector(restartConection) withObject:nil afterDelay:15.0];,但这会导致不希望的情况,即当对象的创建者释放对象时,performSelector和NSURLConnections会永久保留“self”,并且永远不会释放它。

如何在不永久保留对象的情况下执行此操作?任何帮助将不胜感激。

谢谢,-Alec

最佳答案

您无法避免保留对象。在下一个主循环周期中,运行时将在释放的对象上调用选择器时,将保留它,以免您从丑陋的崩溃中退出。

如果您确实坚持要立即释放对象而不等待延迟的选择器,则建议您创建一个单独的代理类。假设您的类称为A,请创建代理类B,该类将对您的类A(即__weak A* a)进行弱引用,并创建restartConnection选择器,该选择器将检查弱引用是否有效。如果是这样,它将在restartConnection对象上调用A。然后,当然要对BrestartConnection进行延迟的选择器

但首先,我真的建议您重新评估您是否真的不能忍受保留。

关于objective-c - performSelector : afterDelay: without retaining the target?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8873384/

10-10 21:33