Iphone ios 在单独的线程中运行

在单独的线程上运行代码的最佳方式是什么? 是:

[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];

或者:

    NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(doStuff:)
object:nil;
[queue addOperation:operation];
[operation release];
[queue release];

我一直在用第二种方法,但是我读的 Wesley 烹饪书使用了第一种方法。

71107 次浏览

In my opinion, the best way is with libdispatch, aka Grand Central Dispatch (GCD). It limits you to iOS 4 and greater, but it's just so simple and easy to use. The code to do some processing on a background thread and then do something with the results in the main run loop is incredibly easy and compact:

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
//
//
dispatch_async( dispatch_get_main_queue(), ^{
// Add code here to update the UI/send notifications based on the
// results of the background processing
});
});

If you haven't done so already, check out the videos from WWDC 2010 on libdispatch/GCD/blocks.

The best way for the multithreading in iOS is using GCD (Grand Central Dispatch).

//creates a queue.


dispatch_queue_t myQueue = dispatch_queue_create("unique_queue_name", NULL);


dispatch_async(myQueue, ^{
//stuffs to do in background thread
dispatch_async(dispatch_get_main_queue(), ^{
//stuffs to do in foreground thread, mostly UI updates
});
});

I would try all the techniques people have posted and see which is the fastest, but I think this is the best way to do it.

[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];

I have added a category on NSThread that will let you execute threads in blocks with ease. You can copy the code from here.

https://medium.com/@umairhassanbaig/ios-how-to-perform-a-background-thread-and-main-thread-with-ease-11f5138ba380