2014-04-04 4 views

ответ

1

Да, в OS X это делается на уровне ОС через IOPMLib, подсистему управления питанием, которая также является подсистемой, которая управляет AppNap под OS X Mavericks.

Вот пример того, что мы делаем при выполнении тяжелых вычислений. В нашем случае мы не даем процессору спать, но вы можете предотвратить отображение сна из-за использования kIOPMAssertionTypePreventUserIdleDisplaySleep, где мы использовали kIOPMAssertionTypePreventUserIdleSystemSleep.

@property IOPMAssertionID currentPowerAssertion; 


- (void)assertPowerRequirement:(NSString*)reason 
{ 
    // don't re-assert if we're already here 
    if (_currentPowerAssertion) 
     return; 

    IOPMAssertionID assertionID; 

    IOReturn success = IOPMAssertionCreateWithName( 
      kIOPMAssertionTypePreventUserIdleSystemSleep, // prevent CPU from going to sleep 
      kIOPMAssertionLevelOn,       // we are turning this on 
      (__bridge CFStringRef)reason,     // here's why 
      &assertionID);         // reference for de-asserting 

    if (success == kIOReturnSuccess) { 
     _currentPowerAssertion = assertionID; 
    } else { 
     NSLog(@"Power assert failed"); 
    } 
} 

- (void)deassertPowerRequirement 
{ 
    if (!_currentPowerAssertion) 
     return; 

    IOReturn success = IOPMAssertionRelease(_currentPowerAssertion); 
    if (success !=kIOReturnSuccess) { 
     NSLog(@"Power de-assert failed"); 
    } 

    _currentPowerAssertion = 0; 
} 

В данном случае, это в нашем App делегата, и мы имеем currentPowerAssertion свойства следить. Поскольку мы используем только одно состояние утверждения и только для одной цели, мы используем единый механизм хранения. Тем не менее, вы можете утверждать несколько раз из разных частей вашей программы, если вы балансируете утверждения с де-утверждениями и используете соответствующие reason. В спецификациях Apple указывается причина, а не NULL, и предлагайте, чтобы имя и задача приложения были описаны в утверждении.

Важно, чтобы вы отказались от этого, когда вам это больше не нужно, хотя утверждения сохраняются в каждом приложении, поэтому, когда ваше приложение завершается, они автоматически будут отменены.

Смежные вопросы