0

我正在开发一个 iPhone 应用程序,我对 Objective-c 比较陌生,所以我希望有人能提供线索。

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

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

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)
 {

 }];

我想启动另一个线程,这样我就可以并行编码块并知道进程何时完成,这样在编码一个块时我可以同​​时编码另外 3 或 4 个块。

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

谢谢你的时间。

4

2 回答 2

1

看看 NSOperation 和 NSOperationQueue。

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

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

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

于 2013-08-16T20:46:12.453 回答
0

有很多不错的选择可以为 iOS 并行执行大量工作。

请查看 Apple 的并发编程指南以帮助您入门。

于 2013-08-16T20:51:55.650 回答