有什么方法可以通过以下方式杀死线程:
[NSThread detachNewThreadSelector:@selector(serverFetchInThread) toTarget:self withObject:nil];
我正在处理的场景是,在我的主线程中,我让用户在我的搜索栏中输入数据以及用户输入的内容我需要发送到服务器以便在单独的线程中进行搜索。现在,如果用户通过删除旧数据并输入新数据来更改其选择,我不希望先前的线程浪费时间,杀死它并使用新数据生成新线程。
还有其他更好的方法来处理这种情况,请指导我。
答案 0 :(得分:3)
不,没有办法从另一个线程中杀死一个线程。并且有充分理由因为没有办法以一种方式执行此操作,其中目标线程被杀死而没有崩溃应用程序的风险。
直接回答你的问题;你需要有一种标志,告诉线程它应该停止做它正在做的事情并退出。
但是,您的问题提出了几个问题:
首先,为什么使用线程而不使用GCD?通过GCD或NSOperation的并发是解决此类问题的一般推荐方法。
其次,如果您正在与服务器通信,您使用的是HTTP(大部分时间都是这种情况)吗?如果是这样,为什么不直接使用NSURL和朋友的异步功能?
答案 1 :(得分:1)
仔细查看使用NSOperationQueue
。
您可以将NSOperation
子类化以包装您的服务器通信,甚至使该队列成为串行(最大操作数= 1)。
如果服务器操作尚未完成且用户已生成更多输入,您可以取消现有服务器并添加新服务器。
由于NSOperation
包裹您的连接的影响,您可以使用简单的同步版本并保持连接处理非常简单。
另外值得一提的是兼容性。我更喜欢使用GCD和块,但为了兼容性,需要NSOperationQueue
。