0

私はiPhoneアプリを開発していますが、objective-cには比較的慣れていないので、誰かが手がかりを与えてくれることを願っています.

私がしていることは、ファイルをチャンクで読み取り、チャンクをbase64にエンコードすることであり、すべてが正常に機能しています.問題は、この行にあることです NSString *str = [data base64EncodedString]; 256KBのチャンクをエンコードしているため、少し時間がかかります。1つのファイルに問題はありません。問題は、画像ファイルをエンコードしているため、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)
 {

 }];

別のスレッドを開始して、チャンクを並列にエンコードし、プロセスがいつ終了するかを知ることができるようにしたいのですが、このようにして、1 つのチャンクをエンコードしながら、別の 3 つまたは 4 つのチャンクを同時にエンコードできます。

これを安全に実装するにはどうすればよいですか、それとも良い考えですか?

御時間ありがとうございます。

4

2 に答える 2

0

iOS で大量の作業を並行して実行するための優れたオプションが多数あります。

Apple のConcurrency Programming Guideを参照して、作業を進めてください。

于 2013-08-16T20:51:55.650 に答える