Xcode NSMutableData replaceBytesInRange CPU 用法

Xcode NSMutableData replaceBytesInRange CPU usage

我正在写一个 Mp3 播放器。我正在从服务器下载 mp3 文件。文件已加密。我客户的加密方法非常简单。他们只是在每个 X 字节中插入一位。就像代码中的 323 一样。但是解密过程需要很长时间。而且 CPU 的使用量很大?为什么?我能做什么?

_mappedData = [[NSMutableData dataWithMappedContentsOfFile:_cachedPath] mutableCopy];

  Singleton *singleton = [Singleton sharedSingleton];

  NSLog(@"Decryption started");

  if(singleton.playerMode == PLAYERMODELISTEN)
  {
     int i = 323;
     while (i < [_mappedData length]) {
         [_mappedData replaceBytesInRange:NSMakeRange(i, 1) withBytes:NULL length:0];
         //CFDataDeleteBytes((CFMutableDataRef)_mappedData, CFRangeMake(i, 1000));
         i += 323;
     }
  }


  [General dismissGlobalHUD];

  NSLog(@"Decryption completed");

最后我自己解决了这个问题。

NSMutableData *decryptedData = [[NSMutableData alloc] init];

  NSUInteger length = [_mappedData length];
  NSUInteger chunkSize = 500;
  NSUInteger offset = 0;

  do {
      NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
      NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[_mappedData bytes] + offset
                                           length:thisChunkSize
                                     freeWhenDone:NO];
      offset += (thisChunkSize + 1);

      [decryptedData appendData:chunk];

  } while (offset < length);

  _mappedData = decryptedData;

这就是我的解决方案。工作速度非常快。