iOS 内存激增原因和处理方案

最近一款医疗的app,在做项目的时候,遇到了内存激增

原因,开启了异步执行的子线程,while 依照条件无限循环,但是在while循环里,回退主线程发出通知,
不要用回退主线程的写法,如果通知的方法调用,有刷新UI,那就在观察者的方法里写上主线程的执行操作
但是这种while循环还是比较消费cpu的,如果可以,也可以用线程等待

下面推荐,两个子线程,一个线程A等待,一个线程B读取消息,B读取完消息,唤醒线程A,如果超市时间内B没有读取到消息,则A自动唤醒,的做法:
NSDate *finalDate = [[NSDate alloc] initWithTimeIntervalSinceNow:timeOut/1000.0];//秒timeOut为超时时间
[SDUReceiveQueue sharedManager].condition = [[NSCondition alloc] init];
[[SDUReceiveQueue sharedManager].condition lock];
[[SDUReceiveQueue sharedManager].condition waitUntilDate:finalDate];
[[SDUReceiveQueue sharedManager].condition unlock];

  • (void)parseDataAndEnqueue:(NSMutableArray *)data {
NSMutableArray *tempsArr = [NSData  switchDataWithArray:data];
NSMutableArray  *acks = [NSMutableArray  arrayWithArray:[self.mSDUParser   parseWithBuffer:tempsArr]];

if (acks.count > 0) {
    SDU  *sdu = acks[0];
    [[SDUReceiver  sharedInstance].queueArray  addObject:sdu];
    [[SDUReceiveQueue   sharedManager]    invokeThread];
}else{
    
}

}

  • (void)invokeThread {
    [[SDUReceiveQueue sharedManager].condition lock];
    [[SDUReceiveQueue sharedManager].condition signal];
    [[SDUReceiveQueue sharedManager].condition unlock];
    }

你可能感兴趣的:(iOS 内存激增原因和处理方案)