좋아, 아주 간단한 질문 일지 모르지만 나는이 문제를 해결하는 가장 좋은 방법에 조금 갇혀있다.NSURL 연결이 완료되기를 기다리는 동안 objective-c 메소드 실행을 어떻게 막으시겠습니까?
iPhone SDK를 사용하여 objective-c 응용 프로그램을 코딩하고 있습니다. 일부 사용자 지정 개체가 있습니다. 이러한 객체는 NSURL 요청을 실행하고 데이터를 웹 서버로 보내고 데이터를 검색하고 계속 이동합니다.
내 문제는 내가 인증 할 서버에 초기 요청이 있습니다. 이 요청이 성공하면 다음 요청에서 사용할 세션에 대한 정보가 반환됩니다. 시작시에 응용 프로그램을 인증하고 첫 번째 후속 요청을하려면 첫 번째에서 두 번째를 수행하는 데 필요한 데이터가 필요합니다. 내 문제는 목표 - C에서 요청 개체에 메시지를 보내 요청을 실행하고 결과로 변수에 데이터를 반환 할 때입니다. 기본적으로 언어는 첫 번째 요청이 진행되는 동안 내 방법을 계속 실행합니다. 내 두 번째 요청은 아직 데이터를 반환하지 않은 첫 번째 요청으로 인해 성공할 수 없습니다.
나는이라는 것을 기억하지 않지만 그것은 절차 적 코드, 병렬 처리 또는 무언가 대 단일 스레드 코드를 실행의 라인에 무언가이다.
웹 요청을 보내는 개체가 반환 값을 얻을 때까지 내 메서드 실행을 유지하는 가장 좋은 방법은 무엇입니까?
나는이 작업을 수행하는 데 몇 가지 방법이있을 것이라고 확신하지만 '적절한'것으로 간주되는 것을 찾고 있습니다.
아래의 sudo 코드 예.
//First Request is sent obtaining some data that we will soon manipulate
MyClient *client = [[MyClient alloc] init];
NSString *returnData = [MyClient runRequest];
//Call an object that now plays with the data and does some neat things
CustomObject *CustomObj = [[CustomObject alloc] init];
[CustomObj dealWithResponse:returnData];
//Problem is now when I process the return data, it hasn't completed the first request from line 2 yet
벤, 당신은 절대적으로 옳다. 일반적으로 콜백 함수가 여기로가는 길입니다. 여기 구현에 대해 좀 더 생각해 봐야겠다. 본질적으로 내가 바라는 것은 일종의 타임 아웃과의 동기식 연결이다. 최종 목표는 웹 서비스 호출을 할 수있는 클라이언트 객체를 가지며 짧은 시간 내에 응답이 돌아 오지 않으면 오류가 발생합니다. 응답이 다시 발생하면 UI 동작이 발생하고 다른 요청이 트리거 될 수 있습니다. 그러나 우리가 데이터 또는 오류를 기다리는 동안 나는 다른 전화를 할 수 없습니다. 대기열은 아마도? – Hazmit
이 답변은 맞습니다. 즉시 반환해야합니다. 나중에 응답을 처리하는 콜백 함수는 데이터 처리 또는 오류 표시를 담당합니다. 이 개념을 이벤트 구동 프로그래밍이라고합니다. http://en.wikipedia.org/wiki/Event-driven_programming – Jacob
동기화, 비동기 및 콜백의 +1 슈퍼 정의 –