나는 다음과 같은 예를 들어 루프에서 레이블을 업데이트 할 :iOS의 UI 요소는 스레드가없는 루프에서 어떻게 업데이트 될 수 있습니까?
- (void)viewDidLoad {
[super viewDidLoad];
int i=0;
while (1) {
i++;
[NSThread sleepForTimeInterval:0.05]; // do some computation,
[myLabel setText:[NSString stringWithFormat:@"%d", i]]; // show the result!
[self.view setNeedsDisplay];
}
}
몇 가지 무거운 계산이 이루어집니다 대신 수면의 가정합니다. 백그라운드에서 계산을 수행하는 오버 헤드를 원하지 않습니다. 이 예로서, .DoEvents 것이이 문제를 처리하기위한 윈도우 상당 보여줍니다 아이폰 OS에서이에 대한 유사한 솔루션 http://www.tek-tips.com/viewthread.cfm?qid=1305106&page=1
있습니까?
[self.view setNeedsDisplay]가 전혀 작동하지 않습니다!
메인 스레드의 제어 된 일정에 따라 iOS의 응용 프로그램 이벤트를 처리하는 방법이 있어야합니다 ... Windows의 .DoEvents와 마찬가지로 모든 단점에도 불구하고 일부 간단한 응용 프로그램에는 매우 유용합니다.
게임 루프와 같지만 UI 구성 요소가있는 것 같습니다.
performSelector : withObject : afterDelay : 을 사용해보세요. http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector : withObject : afterDelay : inModes : – AmineG
[self.view performSelector : @selector (setNeedsDisplay) withObject : nil afterDelay : 0]; 작동하지 않습니다 ... – brbr
[self performSelectorOnMainThread : @selector (heavyDutyComputation) withObject : nil waitUntilDone : YES]; 작동하지 않습니다 ... – brbr