开发者

how to make a simple multithreading?

Okay, now I was making a mobile application like restaurant finder, I want to show a photo of the restaurant

the example : restaurant x <image x>

It's a code:

if (ImageToDisplay != nil)
{
   NSData * imageData = [[[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: ImageToDisplay.URL]]autorelease];
   ImageForRestaurant.image = [UIImage imageWithD开发者_如何学编程ata: imageData];
}

The problem is this process of downloading pictures may take too long. So I want the process to be run on a different thread.

That way the code after that can run without having to wait this one to finish.

How can I do so?


 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];
}

I've just included basics in multi-threading; I guess it will serve your purpose


Did you try

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

I think it's the easiest way.


Use the ASIHTTPRequest library. See 'Creating an asynchronous request' on this page: http://allseeing-i.com/ASIHTTPRequest/How-to-use

Also the new library AFNetworking looks promising. As they say:

If you're tired of massive libraries that try to do too much, if you've taken it upon yourself to roll your own hacky solution, if you want a library that actually makes iOS networking code kinda fun, try out AFNetworking.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜