까지 루핑한다고 말하면 나는 실제로 을 의미한다고 가정합니다.까지 기다립니다.
첫 번째로 주 스레드에서이 대기를 잊어 버리면 주 스레드를 차단하지 말아야합니다.
루프 대신 잠금을 사용하여 조건을 기다리는 것이 좋습니다. 배열을 채울 때까지 기다리는 코드와 배열을 채우는 코드 사이에 공유 잠금이 필요합니다.
[sharedLock lockWhenCondition:MYConditionStateNoObjects];
// Your stuff to get the objects to add here.
[sharedArray addObjectsFromArray:theObjectsToAdd];
[sharedLock unlockWithCondition:MYConditionStateHaveObjects];
그리고 배열 될 때까지 기다려야한다 수신기가 객체가 이렇게 있습니다 : 다음해야 할 배열을 채 웁니다
typedef enum {
MYConditionStateNoObjects,
MYConditionStateHaveObjects
} MYConditionState;
...
sharedArray = [[NSMutableArray alloc] init];
sharedLock = [[NSConditionLock alloc] initWithCondition:MYConditionStateNoObjects];
귀하의 방법
먼저 이런 공유 상태 잠금을 만들 :
[sharedLock lockWhenCondition:MYConditionStateHaveObjects];
// ... Do something with the objects you got here
[sharedArray removeAllObjects];
[sharedLock unlockWithCondition:MYConditionStateNoObjects];
왜 그 배열을 기다리는 중입니까? 배열을 채우는 동일한 코드 블록 만 컨트롤러에 데이터가 준비되었음을 알리는 것이 아닌가? – yan
가능한 경우 서버와 함께 asychronus 콜백을 설정하려고합니다. 루프 설정은 비용이 많이들 수 있습니다. –
Yan - 그 배열에는 다음보기에서 레이블/등을 채우는 정보가 있습니다. 데이터가 준비되었다는 것을 어떻게 알릴 수 있습니까? – Baub