Iphone ASIHTTPRequest中的线程
我有一个名为Folio APIWrapperv2的单例包装类,负责处理iPhone应用程序中的所有API数据调用 这个类实现ASIHTTPRequest以便从我的服务器获取JSON。ASIHTTPRequest完成后,将调用requestFinished:。在这个方法中,我有额外的数据处理,可能需要几秒钟才能完成。它不是主要的,但它会稍微减慢应用程序的速度,因为它是一个阻塞呼叫。为了解决这个问题,我使用GCD创建了一个新线程。但是,当该线程运行时,我得到以下错误:Iphone ASIHTTPRequest中的线程,iphone,ios,asihttprequest,grand-central-dispatch,Iphone,Ios,Asihttprequest,Grand Central Dispatch,我有一个名为Folio APIWrapperv2的单例包装类,负责处理iPhone应用程序中的所有API数据调用 这个类实现ASIHTTPRequest以便从我的服务器获取JSON。ASIHTTPRequest完成后,将调用requestFinished:。在这个方法中,我有额外的数据处理,可能需要几秒钟才能完成。它不是主要的,但它会稍微减慢应用程序的速度,因为它是一个阻塞呼叫。为了解决这个问题,我使用GCD创建了一个新线程。但是,当该线程运行时,我得到以下错误: [FolioAPIWrappe
[FolioAPIWrapperv2 respondsToSelector:]: message sent to deallocated instance 0x245050
此函数正在ASIHTTPRequest的handleBytesAvailable方法中调用,该方法位于以下行:
if ([[self delegate] respondsToSelector:[self didReceiveDataSelector]]) {
我不知道这里发生了什么。FolioAPIWrapperv2是一个单例类,因此永远不应该释放它。我试着在网上搜索,看看人们在线程方面还有哪些问题,但没有找到合适的解决方案。有人有想法吗?您是将委托设置为类的实例还是类本身?委托必须是类的实例 否则,如果您正在获取输出:
[FolioAPIWrapperv2 respondsToSelector:]: message sent to deallocated instance 0x245050
然后,您的类似乎永远不应该被释放,但它正在被释放
无论哪种方法,至少有一种方法是添加一些调试,例如,在创建请求时:
NSLog("set delegate to %p", request.delegate);
在singleton的init/dealloc中也有类似的self日志记录。好的,所以我做了一些测试,发现当线程调用singleton中的方法时,它会被释放。如果线程没有在单例中调用该方法,那么它可以工作。“你知道这是怎么回事吗?”迈克尔。一点线索也没有!尝试在dealloc上粘贴一个断点,如果失败,则断点释放/自动释放-这将向您显示执行解除分配的代码。