Как выполнить NSUrlConnection в отдельном потоке? - PullRequest
0 голосов
/ 21 апреля 2010

Я делаю свои первые шаги и с URL-связями, и с нитями, так что терпите меня, если вопрос может оказаться тривиальным. По сути, я хотел бы выполнить 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 Ответ

0 голосов
/ 21 апреля 2010

Вы можете создать метод, который позаботится о создании NSURLConnection и других связанных вещей.
Затем вызовите этот метод в другом потоке.

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

NSAutoreleasePool необходим для обработки автоматически выпущенных объектов. Поскольку метод подключения выполняется в другом потоке, пул не существует, и вы должны создать его самостоятельно.

Затем создает поток для метода подключения:

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