Xcode NSMutableData replaceBytesInRange CPU使用率

时间:2015-03-29 18:59:08

标签: objective-c cpu-usage nsmutabledata

我正在写一个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");

1 个答案:

答案 0 :(得分:1)

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

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;

这是我的解决方案。工作得非常快。