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執行緒的。
樓主確定這這些代碼所造成的記憶體成長嗎?如果確定,可以在這個函數入口加個斷點,然後一步一步的調試,看看走完哪一行程式碼後記憶體有的成長
如果循環很多,可以手動加上釋放池:
例如你的程式碼改為: