84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
ringa_lee
NSThread线程中不要使用NSData的subdataWithRange方法
转来的,你可以看看
代码没给全吧,也没看出来对data做了啥操作啊。另外,在主线程调用sleepForTimeInterval会卡住UI线程的。
楼主确定这这些代码引起的内存增长吗?如果确定,可以在这个函数入口加个断点,然后一步一步的调试,看看走完哪一行代码后内存有的增长
如果循环很多,可以手动加上释放池:
@autoreleasepool { your code }
例如你的代码改为:
- (void)viewDidLoad { [super viewDidLoad]; staitc int EVERBUFFERLEN = 2000; NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"wakeup.pcm" ofType:nil]]; NSMutableData *mData = [NSMutableData dataWithData:data]; int readLength = 0; while (readLength < mData.length) { if (mData.length - readLength > EVERBUFFERLEN) { @autoreleasepool { NSData *data = [mData subdataWithRange:NSMakeRange(readLength, EVERBUFFERLEN)]; readLength += EVERBUFFERLEN; [NSThread sleepForTimeInterval:0.01]; data = nil; } } }
为工程师推荐兼职,详情点我头像
转来的,你可以看看
代码没给全吧,也没看出来对data做了啥操作啊。另外,在主线程调用sleepForTimeInterval会卡住UI线程的。
楼主确定这这些代码引起的内存增长吗?如果确定,可以在这个函数入口加个断点,然后一步一步的调试,看看走完哪一行代码后内存有的增长
如果循环很多,可以手动加上释放池:
例如你的代码改为: