背景: 项目里面有个方法想重复调用, 不想写timer, 太麻烦了, 决定用NSOperation来干, 里面加一个while 循环, 然后sleep一下, 重复调用.上代码. 但是那个想要执行的方法就是不执行, 打断点sleep确实是执行了, 想当搞不懂了
NSOperation *opr = [NSBlockOperation blockOperationWithBlock:^{
while (true) {
sleep(5);
dispatch_async(dispatch_get_main_queue(), ^{
[self getAllHealthData];
});
}
}];
[opr start];
[_myQueue addOperation:opr];
思考: 当时在想难道是dispatch那里错了, 当前执行的线程有问题, 可是怎么看也不像有问题的样子, 调试的时候发现有时候界面会卡死, 当时在想_myQueue弄错了?跑到主线程去了, 网上找了一圈发现queue写法没有问题, 后来仔细对比以前写的代码, 发现多了[opr start]. 删掉就正常运行了.
总计: operation不需要手动start, 直接加入queue即可, 如果手动调用start, 会在当前线程里面执行, 所以才会出现前面遇到的问题.