2017-02-07 5 views
1

NSDataオブジェクトを使用してメモリデータを保持します。しかし、NSData.bytesを使用してメモリデータにアクセスすると、メモリリークが発生します。 サンプルコードは以下の通りです:NSDataアクセスバイトによってメモリリークが発生する

char buf[12]; 

@interface ViewController() 

@property (nonatomic, copy) NSData *tempData; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tempData = [[NSData alloc] initWithBytes:buf length:12]; 

    [self loopReadData]; 
} 

- (void)loopReadData { 
    while(true) { 
     [self calcData:self.tempData]; 
    } 
} 

- (void)calcData:(NSData *) data { 
    const void *dataPtr = data.bytes;  ///< memory leak 
    sleep(0.1); 
} 

@end 

のサンプルコードは、メモリリークが発生していない時に、メモリの終了私のアプリがクラッシュします非常にsimple.Butです。

答えて

1

私はコードにautoreleasepoolを追加します。再度メモリリークはありません。

- (void)loopReadData { 
    while(true) { 
     @autoreleasepool { 
      [self calcData:self.tempData]; 
     } 
    } 
} 
関連する問題