我正在尝试解码一些数据,但是当数据大于 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){
当我删除它时,它现在可以很好地解码大块数据。
为什么会这样,有什么办法可以让它在后台线程上工作?
谢谢