내 응용 프로그램의 PubSub Client에있는 모든 가입 피드를 거치고 모든 항목을 읽음으로 표시하는 메소드가 내 Cocoa Mac 응용 프로그램에 있습니다. 읽지 않은 많은 수는 모두 순환에 시간이 걸릴 수 있습니다 피드가있는 경우 논리는 다음과 같이 보입니다NSInvocationOperation 질문
...
NSArray *feeds = [[PSClient applicationClient]feeds];
for(PSFeed *feed in feeds)
{
for(PSEntry *entry in [feed entries])
{
entry.read = NO;
}
}
(상대적으로 말하기). 다른 것들은 백그라운드에서 진행되는 동안 사용자가 기사를 스크롤 같은 다른 일을 할 수있게하고 싶습니다. 그래서 루프가 실행되는 동안
NSInvocationOperation *opr = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(markAllReadOperation) object:nil];
[que addOperation:opr];
[opr release];
응용 프로그램이 여전히 심각한 성능 저하를 경험 ...과 같이 메서드를 호출하는 NSInvocationOperation 설정을 가지고있다. 그리고 UI는 거의 반응이 없습니다. NSInvocationOperation으로 무언가를 놓치고 있습니까? 아니면 내 논리가 본질적으로 느린 것입니까?
거꾸로 지원하는 데 아무 문제가 없습니다. Mac App Store에 가져갈 계획입니다. 따라서 사용자는 기본적으로 10.6을 사용하게 될 것입니다. 이제는 NSInvocationOpeartion이 실패한 것을 어떻게 개선 할 것입니까? 나는 NSOperation이 더 높고 덜 복잡한 레이어에서 동일한 기능을 제공한다는 인상하에있었습니다. 업데이트 : 나는 이것을 시도했지만 작업이 별도의 스레드에서 실행되는 동안 나는 여전히 UI 응답이 부족합니다. – avizzini
그건 이해가되지 않습니다 ... 나는 또한 어떤 호출이 블록을 일으키는 지 확인하기 위해 Instruments에서 프로파일 링을 권장합니다. –
이전에 악기에서 프로파일 링을 사용하지 않았지만 정확히 무엇을 찾고 있습니까? 내가 알 수 있듯이 PubSub은 이벤트가 진행되는 동안 가장 높은 비율을 차지하고 있습니다. 심볼 이름을 탐색하는 동안 내 메소드는 "_dispatch_worker_thread2"에서 발생하고 "sendChangesSinceDate"(내 작업이 작동하는 동안 가장 높은 백분율을 차지함)와 같은 실제 PubSub 작업은 "Thread 0x5565 : Main Thread"에서 발생합니다. – avizzini