NSData访问字节导致内存泄漏

时间:2017-02-07 01:48:35

标签: memory memory-leaks nsdata

我使用NSData对象来维护内存数据。但是当我使用NSData.bytes访问内存数据时。它会导致内存泄漏。 示例代码如下:

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

示例代码非常简单。但是当没有内存退出时,会导致内存泄漏并导致我的应用程序崩溃。

1 个答案:

答案 0 :(得分:1)

如果我在代码中添加autoreleasepool。再没有内存泄漏。

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