如何终止performSelectorInBackground:thread?

时间:2011-08-25 00:27:49

标签: objective-c multithreading cocoa

如何从主线程中杀死performSelectorInBackground:withObject:创建的线程?我需要强制终止冻结线程。

3 个答案:

答案 0 :(得分:9)

你不能从主线程中杀死后台线程,后台线程中执行的方法必须返回以使线程结束。

你的实际问题似乎是你的后台线程正在冻结,你应该解决这个问题,而不是试图解决它。

答案 1 :(得分:0)

我不确定这是否有所帮助,但这里有:

假设您正在调用来自A类的performSelector调用。假设A类即将从B类的内存中释放(如果选择器尚未执行,那么您可能会正在崩溃 - 因此你在SO上发布这个问题:

无论您何时从B发布A,请执行以下操作:

[NSObject cancelPreviousPerformRequestsWithTarget:A];

答案 2 :(得分:0)

Apple documentation

  

退出线程的推荐方法是让它退出入口点   常规的。虽然是Cocoa,POSIX和Multiprocessing Services   提供直接杀死线程的例程,使用这样的例程   强烈劝阻。杀死一个线程会阻止该线程   自己清理干净。线程分配的内存可以   可能被泄露以及目前正在使用的任何其他资源   线程可能无法正确清理,从而产生潜在问题   后面。