Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ASIHTTPRequest中的线程_Iphone_Ios_Asihttprequest_Grand Central Dispatch - Fatal编程技术网

Iphone ASIHTTPRequest中的线程

Iphone ASIHTTPRequest中的线程,iphone,ios,asihttprequest,grand-central-dispatch,Iphone,Ios,Asihttprequest,Grand Central Dispatch,我有一个名为Folio APIWrapperv2的单例包装类,负责处理iPhone应用程序中的所有API数据调用 这个类实现ASIHTTPRequest以便从我的服务器获取JSON。ASIHTTPRequest完成后,将调用requestFinished:。在这个方法中,我有额外的数据处理,可能需要几秒钟才能完成。它不是主要的,但它会稍微减慢应用程序的速度,因为它是一个阻塞呼叫。为了解决这个问题,我使用GCD创建了一个新线程。但是,当该线程运行时,我得到以下错误: [FolioAPIWrappe

我有一个名为Folio APIWrapperv2的单例包装类,负责处理iPhone应用程序中的所有API数据调用

这个类实现ASIHTTPRequest以便从我的服务器获取JSON。ASIHTTPRequest完成后,将调用requestFinished:。在这个方法中,我有额外的数据处理,可能需要几秒钟才能完成。它不是主要的,但它会稍微减慢应用程序的速度,因为它是一个阻塞呼叫。为了解决这个问题,我使用GCD创建了一个新线程。但是,当该线程运行时,我得到以下错误:

[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上粘贴一个断点,如果失败,则断点释放/自动释放-这将向您显示执行解除分配的代码。