搜尋

首頁  >  問答  >  主體

iOS ARC 内存一直不停的增加

ringa_leeringa_lee2771 天前610

全部回覆(4)我來回復

  • PHP中文网

    PHP中文网2017-04-17 15:46:11

    NSThread執行緒​​中不要使用NSData的subdataWithRange方法

    轉來的,你可以看看

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:46:11

    程式碼沒給全吧,也沒看出來對data做了啥操作啊。另外,在主執行緒呼叫sleepForTimeInterval會卡住UI執行緒的。

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:46:11

    樓主確定這這些代碼所造成的記憶體成長嗎?如果確定,可以在這個函數入口加個斷點,然後一步一步的調試,看看走完哪一行程式碼後記憶體有的成長

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:46:11

    如果循環很多,可以手動加上釋放池:

      @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;
               } 
            }
        }

    推薦我兼職工程師,詳情點我頭像

    回覆
    0
  • 取消回覆