2010-04-21 195 views
0

我正在移动我的第一个步骤与网址连接和线程,所以如果这个问题可能会导致微不足道。 基本上我想在一个单独的线程中执行NSUrlConnection(即使这可能导致许多文档状态为'危险')。在决定是否采用这个解决方案之前,我应该设法首先实现它。 现在问题很简单:做这件事的实际代码是什么。 我知道如何在单独的线程中执行NSUrlConnection?

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

执行下载的,我已经试过了,似乎工作。 我已阅读,

- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 

+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument 

将被用于创建一个新的线程

现在,如何将initWithRequest方法添加到线程?两个线程方法似乎都接受一个至多只有一个参数的选择器。 阅读实际所需的代码将非常感激。

谢谢。

回答

-1

您可以创建一个方法来照顾创建NSURLConnection和其他相关的东西。
然后,在另一个线程中调用该方法。

- (void)connect 
{ 
    NSAutoreleasePool * pool = [ [ NSAutoreleasePool alloc ] init ]; 
    NSURLConnection * theConnection = [ [ NSURLConnection alloc ] initWith ... ]; 
    /* Rest of the code... */ 
    [ pool release ]; 
} 

NSAutoreleasePool是处理自动释放对象所必需的。由于连接方法在不同的线程上执行,因此没有合适的池,您必须自己创建池。

然后创建Connect方法螺纹:

[ NSThread detachNewThreadSelector: @selector(connect) toTarget: self withObject: nil ]; 
+0

您好,感谢您的回答。我试图按照建议做,新创建的方法设置请求,连接和池。正如我从控制台上看到的那样,它经常在新线程中调用,但是没有任何反应。我的意思是委托连接方法不会被调用。没有附加数据,没有连接成功或失败。任何想法呢? – user236739 2010-04-22 09:35:10

+0

您无法访问NSURLConnection的所有代理。 – Satyam 2010-12-28 11:23:54

相关问题