да, вы можете использовать вторичный поток и выполнять большую работу, или вы можете использовать вещи, которые нам дает яблоко.
NSURLDownload, не «отстает» от основного потока. Вы порождаете его с помощью метода и устанавливаете endSelector, endSelector будет вызываться после завершения загрузки.
Создание вторичного потока для этого не совсем то, что вы должны делать.
здесь вы получили некоторый код из моего приложения, который прекрасно работает, не создавая гибели.
- (void)downloadAvatar:(NSString *)URL{
NSURL *url = [[NSURL alloc] initWithString:URL];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
[url release];
NSURLDownload *download = [[NSURLDownload alloc] initWithRequest:request delegate:self];
NSString *path = [[NSString alloc] initWithFormat:@"%@data/%@.jpg",[[BFAppSupport defaultSupport] bfFolderPath],[[xfSession loginIdentity] userName]];
[download setDestination:path allowOverwrite:YES];
[download release];
[path release];
[request release];
}
- (void)downloadDidFinish:(NSURLDownload *)download{
NSString *path = [[NSString alloc] initWithFormat:@"%@data/%@.jpg",[[BFAppSupport defaultSupport] bfFolderPath],[[xfSession loginIdentity] userName]];
NSData *imageData = [[NSData alloc] initWithContentsOfFile:path];
if( [imageData length] < 10 ){
[self performSelector:@selector(downloadAvatar:) withObject:@"http://media.xfire.com/xfire/xf/images/avatars/gallery/default/xfire160.jpg" afterDelay:0.0];
[imageData release];
[path release];
return;
}
NSImage *theImage = [[NSImage alloc] initWithData:imageData];
[imageData release];
[path release];
[yourImage setImage:theImage];
[theImage release];
}
- (void)download:(NSURLDownload *)aDownload didFailWithError:(NSError *)error{
NSLog(@"Avatar url download failed");
}
Код немного уродлив, но его не сложно изменить, так как вы получили 3 вещи, которые вам нужны, метод, который запускает загрузку, и 2, которые обрабатывают или ошибку, или завершение.
Вы также можете использовать объекты с автоматическим освобождением, но с точки зрения производительности мне нравится использовать их без объектов с автоматическим освобождением, когда я могу.