본문 바로가기
프로그래밍 놀이터/iOS

[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #41 ~ #48

by 돼지왕 왕돼지 2017. 10. 16.
반응형

 [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #41 ~ #48


출처 : Effective Objective-C

@synchronized, arc, c framework, c 기본 개념, corefoundation, deprecated, dispatch group, dispatch_get_current_queue, dispatch_get_current_queue 사용을 피하라, dispatch_once, fast enumeration, for 루프, Foundation, GCD, Global, grand centeral dispatcher, nsenumerator, nslock, performSelector, performSelector 메서드군보다는 GCD 를 사용하라, single-code, static, [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #41 ~ #48, 고수준 api, 네트워킹, 데드락, 데이터 관리, 동기화, 동기화에는 락보다는 디스패치 큐를 사용하라, 디버깅, 디스패치 그룹, 디스패치 큐, 락, 멀티스레드, 반복문에는 블록 열거를 사용하라, 배리어 블록, 병렬 큐, 블록, 비디오 처리, 빠른 열거, 스레드 안전 단일 코드, 스레드 안전한 단일 시간 코드 실행은 dispatch_once 를 이용하라, 시스템 프레임워크, 시스템 프레임워크를 숙지하라, 열거, 오디오, 작업 큐, 컬렉션, 큐 전용 데이터, 테스크, 토큰, 파타미터 갯수, 폐기, 프레임워크, 플랫폼 확장의 이점을 얻으려면 디스패치 그룹을 사용하라


#41 : 동기화에는 락보다는 디스패치 큐를 사용하라


     동기화 문법을 제공하기 위해 디스패치 큐를 사용할 수 있다.

     그리고 그냥 간단하게 @synchronized 블록이나 NSLock 객체를 이용해 동기화를 제공할 수도 있다.


     동기화와 비동기화 디스패치를 함께 사용하는 것은 일반적인 락으로 하는 동기화와 동일한 기능을 제공할 수 있지만,

     스레드에서 비동기 디스패치로 호출하면 잠금 없이 호출한다.


     병렬 큐와 배리어 블록을 이용하면 동기화를 좀 더 효율적으로 할 수 있다.




#42 : performSelector 메서드군보다는 GCD 를 사용하라


     performSelector 메서드군을 사용하면 메모리 관리가 어렵다.

     어떤 선택자가 실행될 것인지 알 수 없다면 ARC 컴파일러는 적절한 메모리 관리 호출을 코드에 삽입할 수 없을 것이다.


     이 메서드군은 반환 타입과 메서드에 전달할 수 있는 파라미터 개수가 매우 한정적이다.


     선택자를 다른 스레드에서 실행하기 위해서는 블록을 사용하는 GCD 를 호출하는 방법을 이용하라.




#43 : GCD 가 필요한 때와 작업 큐가 필요한 때를 구분해서 알아두라


     디스패치 큐는 멀티스레드와 테스크 관리의 유일한 해결책은 아니다.


     작업 큐는 GCD 가 하는 대부분의 일을 할 수 잇는 고수준 오브젝티브-C API 를 제공한다.

     또한 이러한 큐들은 GCD 로 한다면 추가적인 코드를 작성해야 하는 좀 더 복잡한 일들을 쉽게 할 수 있다.




#44 : 플랫폼 확장의 이점을 얻으려면 디스패치 그룹을 사용하라


     디스패치 그룹은 작업들을 그룹 짓기 위해 사용된다.

     선택적으로 그룹이 실행이 끝났을 때 알림을 받을 수 있다.


     디스패치 그룹은 병렬 디스패치 큐에 있는 다수의 작업을 병렬로 실행하려 할 때 사용될 수 있다.

     이 경우 GCD 는 다수의 작업을 시스템 리소스에 기반을 두고 동시에 수행되도록 스케줄링한다.

     이를 직접 구현하려면 많은 코드를 작성해야 한다.




#45 : 스레드 안전한 단일 시간 코드 실행은 dispatch_once 를 이용하라


     스레드 안전 단일 코드 (single-code) 실행은 흔히 하는 작업이다.

     GCD 는 이를 위한 사용하기 쉬운 dispatch_once 함수라는 도구를 제공한다.


     토큰은 static 이나 global 로 선언해야 한다.

     반드시 한 번만 실행되어야 하는 각 블록을 위해 전달되는 토큰이 같은 것이어야 하기 때문이다.




#46 : dispatch_get_current_queue 사용을 피하라


     dispatch_get_current_queue 함수는 기대한 것처럼 동작하지 않는다.

     이 함수는 폐기되었다.

     그래서 디버깅 할 때만 사용해야 한다.


     디스패치 큐는 계층 구조로 구성되어 있다.

     그렇기 때문에 현태 큐를 간단히 단일 큐 객체로 표현할 수 없다.


     큐 전용 데이터는 dispatch_get_current_queue 를 사용해야 하는 곳을 대체할 수 있다.

     이를 사용하면 재진입 코드 때문에 발생하는 데드락을 회피할 수 있다.




#47 : 시스템 프레임워크를 숙지하라


     활용할 수 있는 시스템 프레임워크가 많다.

     가장 중요한 프레임워크는 Foundation 과 CoreFoundation 인데 앱 개발에 필요한 많은 핵심 기능을 제공한다.


     오디오, 비디오 처리, 네트워킹, 데이터 관리 같은 많은 공통 작업을 위한 프레임워크가 있다.


     오브젝티브-C 가 아닌 오직 C 만으로 작성된 프레임워크가 있다는 것을 꼭 알고 있어야 한다.

     그래서 좋은 오브젝티브-C 개발자가 되기 위해서는 C 의 기본 개념을 이해해야 한다.




#48 : 반복문에는 블록 열거를 사용하라


     컬렉션을 열거하는 방법은 네 가지가 있다.

     for 루프는 가장 기초적인 방법이다.

     그 다음은 NSEnumerator 와 빠른 열거를 사용해 열거하는 것이다.

     가장 현대적이고 진보된 방법은 블록 열거 메서드를 사용하는 방법이다.


     블록 열거는 추가 코드 없이 GCD 를 활용하여 병렬로 열거를 할 수 있게 한다.

     이는 다른 열거 방법으로는 하기 어려운 일이다.


     만약 알고 있다면 블록 시그너처에서 정확한 객체 타입을 가리키도록 수정하라.




반응형

댓글