iOS 및 Objective C 프로그래밍을 시작할 때 코드가 동 기적으로 실행되지 않는 문제가 발생합니다.메서드가 다른 스레드에서 실행 중입니다.
다음 코드는 내 ViewController.m 파일에 있습니다.
[[self classInstance] instanceMethod];
//more code here executes at the same time as instanceMethod
내 instanceMethod와 코드는 동시에 실행되지만 이후 코드는 실행중인 instanceMethod에 의존합니다. 처음에는 별도의 스레드에 넣으려고했는데 일단 완료된 후에 코드를 실행했지만 어떤 instanceMethod도 절대로 기다리지 않아도 보인다.
나는 그것이 작동시킬 수 있었던 유일한 방법은 일을하는 것입니다 :
[[self classInstance] instanceMethod];
while(self.classInstance.instanceVariable == nil){
// wait for other code to fill the variables I need
// do nothing
}
// execute remaining code
나는 다음 시도했지만이 예상대로 작동하지 않습니다.
dispatch_async(backgroundQueue, ^{
[[self classInstance] instanceMethod];
dispatch_async(dispatch_get_main_queue(), ^{
//other code here for once instanceMethod is completed.
});
});
나는 내가 아직 이해할 수없는 기본적인 것을 놓치고 있다고 느낍니다.
이 'instanceMethod'의 기능은 무엇입니까? 그것의 코드를 보여라. – rmaddy
메서드의 코드는 단순하고 변수를 사용자 기본값으로 채 웁니다. 코드는 사용 된 사용자 기본값 뒤에 있지만 채워지는 것을 기다리지 않았습니다. 코드를 로깅으로 대체하고 동일한 동작을 감지했습니다. 문제는 클래스 인스턴스 메소드가 자체 스레드로 디스패치되는 이유와 실행이 끝난 후 다음 코드가 실행되도록하는 방법에 관한 것입니다. 메서드의 코드는 모든 코드가 비헤이비어를 복제하기 때문에 질문과 관련이 없습니다. – user3473745