0

一部のデータをデコードしようとしていますが、データが 520,000 (バイトですか?) を超えると[data length]、アプリがデバッガーでCCCryptライン上でクラッシュするか、デバッガーから切り離された場合、フリーズして実際には適切にクラッシュしません (Spinner は回り続けます)しかし、アプリは完全にフリーズします)。

これは私の解読コードです:

char *key = ENCRYPTION_KEY;
NSUInteger dataLength = [data length];
uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
size_t unencryptedLength;
CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode, key, kCCKeySizeAES128, NULL, [data bytes], dataLength, unencryptedData, dataLength, &unencryptedLength);
NSData *output = [[NSData alloc] initWithBytes:unencryptedData length:unencryptedLength];

return output;

編集 - - - - -

以下の Hejazi の回答に従って、私はこれを持っていますが、まだ機能しません:(

- (NSData *)decodeSnapDataInBackground:(NSData *)data
{
    char *key = ENCRYPTION_KEY;
    NSUInteger dataLength = [data length];
    uint8_t unencryptedData[dataLength + kCCBlockSizeAES128];
    size_t unencryptedLength;
    size_t unencryptedDataLength = dataLength + kCCBlockSizeAES128;
    CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode, key, kCCKeySizeAES128, NULL, [data bytes], dataLength, unencryptedData, unencryptedDataLength, &unencryptedLength);
    NSData *output = [[NSData alloc] initWithBytes:unencryptedData length:unencryptedLength];

    return output;
}

編集2 -----

バックグラウンド スレッドでデコードを実行すると、この問題が発生するようです。私はこれを使用していました:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

削除すると、大きなデータ ブロックを正常にデコードできるようになりました。

これはなぜですか?バックグラウンド スレッドで動作させる方法はありますか?

ありがとう

4

1 に答える 1