여기에서 만들어지는 점은 크리스 핸슨은 그의 기사 "When to use NSOperation vs. GCD"에 명시 동일 하나입니다
는 항상을 사용
똑 바른 대답은 모든 응용 프로그램 개발을위한 일반 지침입니다 사용할 수있는 가장 높은 수준의 추상화이며 측정에 이 필요하다고 표시되면 을 낮은 수준의 추상화로 내립니다.
이 특별한 경우에는 코코아 애플리케이션을 작성할 때 일반적으로 GCD를 사용하여 이 아닌 NSOperation을 사용해야 함을 의미합니다. 효율성의 차이 때문이 아니라 입니다. NSOperation은 GCD의 메커니즘의 상위 레벨 추상화를 제공하기 때문에.
일반적으로 이에 동의합니다.NSOperation과 NSOperationQueue는 GCD 블록과 큐가 가지고 있지 않은 의존성과 하나 또는 두 가지 다른 것들을 지원하며, 동시 연산이 어떻게 구현되는지에 대한 하위 레벨의 세부 사항을 추상화합니다. 이 기능이 필요하다면 NSOperation은 매우 좋은 방법입니다.
그러나 둘 다 작업 한 후에는 NSOperation 기반 코드를 모두 GCD 블록 및 대기열로 교체하는 것으로 나타났습니다. 나는 두 가지 이유로 이것을 해냈다 : 빈번한 동작을 위해 NSOperation을 사용할 때 상당한 오버 헤드가 있었고, GCD 블록을 사용할 때 내 코드가 더 깨끗하고 더 잘 묘사된다고 생각한다.
첫 번째 이유는 OpenGL ES 프레임을 화면에 렌더링하는 것과 같이 작고 빈번한 작업을 처리 할 때 NSOperation 개체 할당 및 할당 취소 프로세스가 상당한 양의 CPU 리소스를 사용한다는 것을 발견 한 내 응용 프로그램의 프로파일 링 때문입니다. GCD 블록은 오버 헤드를 완전히 제거하여 성능을 크게 향상 시켰습니다.
두 번째 이유는 주관적이지만 NSOperations보다 블록을 사용할 때 코드가 더 깨끗하다고 믿습니다. 블록에 허용 된 범위의 빠른 캡처와 그 인라인 특성으로 인해 코드 작성이 줄어들며, 사용자 정의 NSOperation 서브 클래스를 만들거나 조작에 전달할 매개 변수를 번들로 묶을 필요가 없으며, 왜냐하면 코드가 실행되는 지점에서 실행되도록 코드를 배치 할 수 있기 때문입니다.
다시 한번 말하지만, 나는 더 추상적 인 코코아 애플리케이션에서도 GCD를 더 많이 사용하고 있음을 발견했습니다.
https : // cocoacasts.com/choose-between-nsoperation-and-grand-central-dispatch/ – Masih