如何安全地同时运行多个任务?

时间:2013-08-16 20:27:23

标签: objective-c

我正在开发一款iPhone应用程序,而且我对于objective-c相对较新,所以我希望有人可以提供线索。

我正在做的是以块的形式读取文件并将chuncks编码为base64并且一切正常,问题在于此行NSString * str = [data base64EncodedString];它需要一点时间,因为即时编码256KB的块,一个文件没有问题,问题是我编码图像文件所以想象我编码10个图像,每个图像将有很多块,所以这个过程可以慢一点。

这是一个过程:
*获取文件。
*阅读256KB的文件块。
*将chunck编码为base64 *保存编码的chunck并重复,直到没有更多的字节从文件中读取。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:referenceURL resultBlock:^(ALAsset *asset)
 {

     NSUInteger chunkSize =262144;
     uint8_t *buffer = calloc(chunkSize, sizeof(*buffer));
     ALAssetRepresentation *rep = [asset defaultRepresentation];
     NSUInteger length = [rep size];

     self.requestsToServer=[[NSMutableArray alloc]init];
     NSUInteger offset = 0;
     do {
         NSUInteger bytesCopied = [rep getBytes:buffer fromOffset:offset length:chunkSize error:nil];
         offset += bytesCopied;

         NSData *data = [[NSData alloc] initWithBytes:buffer length:bytesCopied];

         NSString *str = [data base64EncodedString];

         //After this I add the str in a  NSMutableURLRequest and I store the request
          //in a  NSMutableArray for later use.

      } while (offset < length);
     free(buffer);
     buffer = NULL;
}
        failureBlock:^(NSError *error)
 {

 }];

我想开始另一个线程,所以我可以在paralel中对chuncks进行编码,并知道进程何时完成,这样编码一个chunck时我可以同​​时编码另外3个或4个块。

我如何以安全的方式实现这一点,还是一个好主意?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

查看NSOperation和NSOperationQueue。

http://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

只需为每个块创建一个NSOperation并将它们传递给需要编码的块并将它们排队。

您可以告诉队列可以同时运行多少个操作。

答案 1 :(得分:0)

有很多很好的选择可以为iOS并行完成大量的工作。

看看Apple的Concurrency Programming Guide让你前进。