2017-02-07 4 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]; 
     } 
    } 
} 
Смежные вопросы