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

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

by 돼지왕 왕돼지 2017. 9. 26.
반응형

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


출처 : Effective Objective-C

arc, arc finally, ARC 를 사용하여 참조 세기를 쉽게 만들라, CFRelease, cfretain, CLOSE, compiler flag, corefoundation, dealloc, Finally, ID, nsnotification center, observation state, reference count, release, retain, retain count, retain cycle, TRY, [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #25 ~ #32, 런타임 성능, 리테인 수, 메모리 관리 시맨틱, 메서드 이름, 메소드 접두어, 보일러 플레이트 코드, 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙이라, 시스템 자원, 안전한 예외 처리 코드를 작성하려면 메모리 관리를 주의 깊게 다루라, 예외, 익명 객체, 인스턴스 변수, 읽기 쓰기 재선언, 접두어, 참조 세기, 참조 세기를 이해하라, 참조를 릴리스하고 관찰 상태(observersation state)를 정리하는 일은 dealloc 메서드에서만 하라, 카테고리 이름, 카테고리 프로퍼티, 카테고리에는 프로퍼티를 사용하지 말라, 캡슐화, 컴파일러 표식, 클래스 확장 카테고리, 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라, 타입, 파일 디스크립터, 프라이빗 메서드, 프라이빗 메서드 카테고리, 프로토콜 정보, 프로토콜을 이용해 익명 객체를 제공하라, 프로퍼티


#25 : 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙이라


     자신이 소유하지 않은 클래스에 카테고리를 추가할 때는 항상 카테고리 이름에 접두어를 붙이라.


     자신이 소유하지 않은 클래스에 카테고리를 추가할 때 카테고리의 메서드에도 접두어를 항상 붙이라.




#26 : 카테고리에는 프로퍼티를 사용하지 말라


     데이터를 캡슐화하는 모든 프로퍼티 선언은 메인 인터페이스 파일에서 하라.


     클래스 확장 카테고리를 제외하고 카테고리 내에 프로퍼티를 선언하기보다는 접근자 메서드를 사용하라.




#27 : 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라


     클래스에 인스턴스 변수를 추가하기 위해 클래스 확장 카테고리를 사용하라.


     메인 인터페이스에 있는 읽기 전용 프로퍼티를 클래스 내부에서는 세터 접근자를 이용해 값을 설정할 수 있도록 하고 싶으면      클래스 확장 카테고리에 그 프로퍼티를 읽기 쓰기로 재선언하라.


     프라이빗 메서드를 위한 메서드 프로토타입은 클래스 확장 카테고리 내에 선언하라.


     클래스가 따르는 프로토콜 정보를 내부에 숨기고 싶으면 클래스 확장 카테고리를 사용하라.




#28 : 프로토콜을 이용해 익명 객체를 제공하라


     프로토콜은 객체의 타입을 익명으로 만들기 위해 사용될 수 있다.

     프로토콜 메서드를 구현하는 타입은 id 타입으로 줄일 수 있다.


     타입(클래스 이름)을 숨겨야 할 때는 익명 객체를 사용하라.


     어느 클래스 타입이든 별로 상관없고 특정(또는 프로토콜에 정의되어 있는) 메서드에 응답하는 사실이 더 중요할 때 익명 객체를 사용하라.




#29 : 참조 세기를 이해하라


     참조 세기 메모리 관리는 카운터를 증가/감소시키는 방법으로 동작한다.

     객체는 적어도 1의 카운트를 가지고 생성된다.

     리테인 수가 양수인 객체는 살아 있다.

     리테인 수가 0으로 떨어지면 객체는 파괴된다.


     객체의 생애 주기 동안 객체는 이 객체의 참조를 가진 다른 객체에 의해 리테인되고 릴리스된다.

     리테인하는 것과 릴리스하는 것은 각각 리테인 수를 증가시키고 감소시킨다.




#30 : ARC 를 사용하여 참조 세기를 쉽게 만들라


     ARC 는 개발자가 대부분의 메모리 관리에 대해 신경 쓰지 않게 해준다.

     클래스의 보일러플레이트 코드를 없애주는 ARC 를 사용하라.


     ARC 는 적절한 곳에 retain, release 를 추가함으로써 객체 생애 주기 거의 대부분을 다룬다.

     변수 식별자(qualifier)는 메모리 관리 시맨틱을 가리키기 위해 사용될 수 있다.

     이전에는 retain, release 가 수동으로 배치되었다.


     반환하는 객체의 메모리 관리 시맨틱을 알리기 위해 메서드 이름이 사용된다.

     ARC 는 이것을 견고하게 만들었고 이 규칙을 따르지 않는 것은 불가능하다.


     ARC 는 오직 오브젝티브-C 객체만 다룬다.

     이는 ARC 가 CoreFoundation 객체를 다루지 않는다는 것을 의미한다.

     그래서 적절한 CFRetain/CFRelease 호출이 반드시 적용되어야 한다.




#31 : 참조를 릴리스하고 관찰 상태(observation state)를 정리하는 일은 dealloc 메서드에서만 하라


     dealloc 메서드는 오직 다른 객체의 참조를 릴리스하고 키-값 관찰자나 NSNotification Center 알림 같은 것을 등록 해제하는 데만 사용되어야 한다.


     객체가 파일 디스크립터 같은 시스템 자원을 잡고 있으면

     이러한 리소스를 반납하기 위한 메서드가 있어야 한다.

     이러한 자원의 사용이 끝났을 때 클래스의 사용자가 close 메서드를 반드시 호출하게 해야 한다.


     dealloc 메서드 내에서 비동기 작업을 하는 메서드나

     절대로 될 수 없는 상태로 변하는 것을 가정하는 메서드는 호출하지 말아야 한다.




#32 : 안전한 예외 처리 코드를 작성하려면 메모리 관리를 주의 깊게 다루라


     예외가 잡혔을 때 try 블록 내에서 생성한 객체는 반드시 필요한 정리 작업이 수행되도록 보장하라.


     기본으로 ARC 는 예외가 발생했을 때 정리를 하는 코드를 만들어 내진 않는다.

     이는 컴파일러 표식으로 동작하게 설정할 수 있다.

     그러나 많은 양의 코드를 만들어 낼 것이고 런타임 성능에 좋지 않은 영향을 미칠 것이다.




반응형

댓글