Я столкнулся со странным поведением с NSOperation, которое я исправил, но не понимаю.
Я подкласс NSOperation, следуя документации. Когда я использую основной метод ниже, приложение будет использовать 100% или более процессорного времени.
-(void)main
{
@try
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
//Cycle forever until told to cancel
while (![self isCancelled])
{
}
[pool release];
}
@catch(...)
{
// Do not rethrow exceptions.
}
//Finish executing
[self completeOperation]; //Send notificatios using KVO
}
И наоборот, когда я использую следующий основной метод, приложение использует 3% процессорного времени.
-(void)main
{
@try
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
//Create the initial delayed timers
NSTimer *startUpTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:startUpTimer forMode:NSRunLoopCommonModes];
[runLoop run];
//Cycle forever until told to cancel
while (![self isCancelled])
{
}
[pool release];
}
@catch(...)
{
// Do not rethrow exceptions.
}
//Finish executing
[self completeOperation]; //Send notificatios using KVO
}
Это странное поведение, по-видимому, связано с таймером. Если таймеру предлагается не повторяться, приложение использует 100% процессорного времени, но если таймеру предлагается повторить себя, загрузка процессора нормальная.
Похоже, что когда в потоке ничего не работает, загрузка ЦП очень высока (я полагаю, что это будет наоборот) Любые предложения о том, почему это так?
Спасибо.