나는 이상한 문제가 있으며 왜 이런 일이 일어나는지 전혀 모른다. 앱이 백그라운드에서 재생할 수있는 드럼 머신을 실행 중입니다. 응용 프로그램이 백그라운드로 전환 될 때 앱이있을 때와 같은 완벽하게 작동, 또는 적어도, 내가iPhone 화면이 꺼져있는 동안 메서드 실행 대기 시간이
- (void)start
{
self.running = YES;
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
}
로 시작
- (void)run
{
uint64_t interval = [self computeInterval];
mach_timebase_info_data_t info;
mach_timebase_info(&info);
uint64_t currentTime = mach_absolute_time();
currentTime *= info.numer;
currentTime /= info.denom;
uint64_t nextTime = currentTime;
dispatch_queue_t mainQueue = dispatch_get_main_queue();
while (_running) {
if (currentTime >= nextTime) {
dispatch_async(mainQueue, ^{
[_delegate accurateTimerDidTick:self];
});
interval = [self computeInterval];
nextTime += interval;
}
currentTime = mach_absolute_time();
currentTime *= info.numer;
currentTime /= info.denom;
}
}
:
은 여기 내 정확한 타이머 구현입니다 활성 상태. 화면이 잠겨 있어도 제대로 작동하지만 화면이 꺼지면 화면이 멈추거나 속도가 느려집니다. 따라서 응용 프로그램의 상태에 관계없이 화면이 꺼져 있거나 켜져있을 때 성능의 유일한 차이점이 눈에 띄게 나타납니다.
왜 이런 일이 발생하는지 알고 싶습니다.
대단히 감사합니다.
UPDATE 1 : 믿을 수없는 일이 : 나는 Audiobus 응용 프로그램과 그들이 추천하는 첫 번째 테스트와의 통합을 확인하는 시작은 Audiobus는 소리에 어떤 결함이나 대기 시간을가 있는지를 실행하는 동안 응용 프로그램을 실행하는 것입니다. 맞춰봐 - 이제 완벽하게 작동합니다! 더 이상 화면 켜기/끄기와 아무런 차이가 없습니다. 그것이 실제로 좋은 것인지 확실하지 않습니다. 왜냐하면 지금은 더 혼란 스럽기 때문입니다. 물론 Audiobus 앱이 실행되고 있지 않을 때도 같은 문제가 발생합니다.
빠른 응답을 보내 주셔서 감사합니다. 나는 while 루프 안에 다른 수면 메소드를 넣으려고했지만 아무도 트릭을 만들지 못했습니다. 어쩌면 내가 뭔가 잘못하고 있거나 너를 오해 한 것일 수도있어. 제게 올바른 방향으로 조금 밀어 주시겠습니까? 어떤 수면 방법을 사용하겠습니까? 얼마나 오래 자야합니까? 50 밀리 초마다 드럼 비트가 필요하다는 점은 중요합니다. – imilakovic