как сделать простую многопоточность? - PullRequest
0 голосов
/ 27 июня 2011

Хорошо, сейчас я делаю мобильное приложение, например, ресторанный поиск, хочу показать фотографию ресторана

, например: restaurant x <image x>

Это код:

if (ImageToDisplay != nil)
{
   NSData * imageData = [[[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: ImageToDisplay.URL]]autorelease];
   ImageForRestaurant.image = [UIImage imageWithData: imageData];
}

Проблема в том, что процесс загрузки изображений может занять слишком много времени.Поэтому я хочу, чтобы процесс выполнялся в другом потоке.

Таким образом, после этого можно будет выполнить код, не дожидаясь его завершения.

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 27 июня 2011
 if (ImageToDisplay != nil) {
  [self performSelectorInBackground:@selector(loadImage:) object:ImageToDisplay];
}

- (void)loadImage:(ImageToDisplay *)image { //Background method
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSData * imageData = [[[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: ImageToDisplay.URL]]autorelease];
    [self performSelectorOnMainThread:@selector(setImageForRestaurant:) withObject:imageData waitUntilDone:NO];
    [pool release];
}

- (void)setImageForRestaurant:(NSData *)imageData { //Change UI in main thread
    ImageForRestaurant.image = [UIImage imageWithData: imageData];
}

Я только что включил основы в многопоточность; Я думаю, что это будет служить вашей цели

2 голосов
/ 27 июня 2011

Вы пробовали

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

Я думаю, что это самый простой способ.

2 голосов
/ 27 июня 2011

Используйте библиотеку ASIHTTPRequest.См. 'Создание асинхронного запроса' на этой странице: http://allseeing -i.com / ASIHTTPRequest / How-to-use

Также новая библиотека AFNetworking выглядит многообещающе.Как говорится:

Если вы устали от огромных библиотек, которые пытаются сделать слишком много, если вы взяли на себя задачу развернуть свое собственное хакерское решение, если вы хотите библиотеку, которая на самом деледелает сетевой код iOS забавным, попробуйте AFNetworking.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...