2017-02-07 4 views
1

Ich verwende NSData-Objekt, um Speicherdaten zu verwalten. Aber wenn ich NSData.bytes verwende, um auf die Speicherdaten zuzugreifen. Dies führt zu einem Speicherleck. Der Beispielcode ist wie folgt:NSData Zugriffsbytes verursachen Speicherverlust

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 

Der Beispielcode ist sehr simple.But wird Speicherleck verursachen und meine Anwendung abstürzen, wenn keine Speicher beendet.

Antwort

1

Wenn ich Autoreleasepool zum Code hinzufügen. Es gibt kein Speicherleck mehr.

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