본문 바로가기
[Effective Objective-C] #29 참조 세기를 이해하라 [Effective Objective-C] #29 참조 세기를 이해하라 출처 : Effective Objective-C -메모리 관리는 오브젝티브-C 같은 객체 지향 언어에서 중요한 개념이다.어떠한 객체 지향 언어든 그 언어의 메모리 관리 모델을 깊이 이해하고 있으면 메모리를 효과적으로 사용하고 버그가 없는 코드를 작성할 수 있다.이 법칙을 이해하고 나면 오브젝티브-C 의 메모리 관리가 더는 복잡하지 않고 ARC 를 쉽게 사용할 수 있을 것이다.ARC 는 거의 모든 메모리 관리에 대한 결정을 컴파일러에 넘긴다.그래서 개발자는 비지니스 로직에만 집중할 수 있다. -오브젝티브-C 는 메모리 관리를 위해 reference count 를 사용한다.객체가 계속 살아 있길 원하면 count 수를 올리고, 그 객체의.. 2017. 9. 22.
[iOS] Swift 는 어떻게 Objective-C 보다 훨씬 빠른가? [iOS] Swift 는 어떻게 Objective-C 보다 훨씬 빠른가? http://programmers.stackexchange.com/questions/242816/how-can-swift-be-so-much-faster-than-objective-c-in-these-comparisons -Objective-C 자체가 매우 느린 언어이다.C part 는 빠르지만, Objective-C 파트는 그렇게 빠르지는 않다.Objective-C 는 Object 화 시켜 native C 보다는 성능문제가 있다. -Objective-C 는 모든 method 가 dynamic 하게 dispatch 된다.static dispatch 는 없다. 이것이 큰 단점이다. Swift 는 static diaptch 부분을 많이.. 2017. 9. 14.
[iOS] Swift vs. Objective-C [iOS] Swift vs. Objective-C http://www.infoworld.com/article/2920333/mobile-development/swift-vs-objective-c-10-reasons-the-future-favors-swift.html -결론적으로 이 글은 Swift 가 더 좋음을 강조 -Swift 는 더 읽기 쉽다. Objective-C 는 기본적으로 C 베이스로 발전한 것이기 때문에 C 에서 예약한 keyword 를 사용할 수 없다.그래서 @ 를 이용한 keyword 를 사용하는데 가독성이 그리 좋지 않다. Swift 는 위의 @ keyword 관련 문제 뿐만 아니라statement 마지막의 세미콜론이 없어도 되고, conditional expression 에 ( ) 도.. 2017. 9. 13.
[Effective Objective-C] #28 프로토콜을 이용해 익명 객체를 제공하라. [Effective Objective-C] #28 프로토콜을 이용해 익명 객체를 제공하라. 출처 : Effective Objective-C -프로토콜은 프로토콜을 따르는 객체가 구현할(또는 선택(optional)이 아니라면 반드시 구현해야 할) 메서드들을 정의한다.프로토콜은 API 의 자세한 구현 내용을 숨기기 위해 사용할 수 있는데, 그 방법은 반환하는 객체를 프로토콜을 따르는 평범한 id 타입으로 반환하는 것이다.이 방법을 쓰면 특정 클래스 이름이 API 에 노출되지 않는다.이는 인터페이스 뒤편에 수많은 종류의 클래스가 있고 그 모든 클래스를 명시하고 싶지 않을 때 유용하다.다른 말로 하면 하나의 공통 기초 클래스(common base class) 타입으로 반환해야 하는 API 에서 반환해야 할 클래.. 2017. 9. 12.
[Effective Objective-C] #27 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라. [Effective Objective-C] #27 클래스 확장 카테고리를 이용해 상세한 구현을 숨기라. 출처 : Effective Objective-C -클래스가 외부로 공개한 메서드와 인스턴스 변수 이외의 메서드와 변수를 갖길 원할 때가 많이 있다.일단 이런 인스턴스 변수와 메서드들을 외부로 공개하고 문서에 내부용(private)이기 때문에 사용하면 안 된다고 명시할 수 있다.무엇보다도 오브젝티브-C 의 어떠한 메서드나 인스턴스 변수도 실제로는 프라이빗이 아니다.이는 동적 메시징 시스템이 동작하는 방식 때문이다.그렇다 하더라도 꼭 공개할 필요가 있는 것만 공개하는 것이 좋은 사용 방법이다. -클래스 확장 카테고리는 일반적인 카테고리와는 다르게 확장(continuation)이라는 클래스의 구현 파일에 정.. 2017. 9. 11.
[Effective Objective-C] #26 카테고리에는 프로퍼티를 사용하지 말라. [Effective Objective-C] #26 카테고리에는 프로퍼티를 사용하지 말라. 출처 : Effective Objective-C -기술적으로 카테고리에 프로퍼티를 선언하는 것이 가능할지라도 되도록이면 하지 말아야 한다.그 이유는 클래스 확장 카테고리를 제외하고는 카테고리가 클래스에 인스턴스 변수를 추가하는 것이 불가능하기 때문이다.그렇기 때문에 카테고리가 프로퍼티에 해당하는 인스턴스 변수를 합성(synthesize) 할 수도 없다. -카테고리에 있는 인스턴스 변수는 합성될 수 없기 때문에 프로퍼티를 위한 접근자 메서드를 카테고리에 구현해야 하고,그렇게 하지 않으면 접근자 메서드를 @dynamic 으로 선언해야 한다.@dynamic 으로 메서드를 선언하는 것의 의미는 이 메서드를 실행 시간에는 사.. 2017. 9. 10.
[Effective Objective-C] #25 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙여라 [Effective Objective-C] #25 서드 파티 클래스에는 반드시 카테고리 이름을 접두어로 붙여라 출처 : Effective Objective-C -카테고리는 소스코드가 없는 클래스에 기능을 추가하기 위해 흔히 사용된다.이 기능은 매우 막강하지만 또한 이 기능을 사용함으로써 생기는 문제를 간과하기 쉽다.그 문제는 바로 카테고리의 메서드가 마치 클래스에 원래 있었던 것처럼 클래스의 일부분이 되는 사실 때문에 발생한다.이는 카테고리가 로딩될 때 실행 시간에 일어난다.런타임은 카테고리가 구현한 메서드들을 살펴보고 나서 메서드들을 클래스의 메서드 리스트에 추가한다.추가하는 카테고리의 메서드가 이미 클래스에 있다면, 추가되는 카테고리 메서드가 기존 메서드를 덮어 쓴다.이런 식의 덮어쓰기(overrid.. 2017. 9. 9.
[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #17 ~ #24 [Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #17 ~ #24 #17 : description 메서드를 구현하라 인스턴스를 설명하는 유용한 문자열을 제공하려면 description 메서드를 구현하라. 객체가 출력하는 내용을 디버깅할 때 좀 더 자세해지길 원한다면 debugDescription 을 구현하라. #18 : 가변 객체보다는 불변 객체를 사용하라 가능하다면 객체를 불변(immutable)으로 만들라. 프로퍼티를 내부에서 설정할 수 있게 하려면 클래스 확장 카테고리로 읽기 전용 속성을 읽기-쓰기로 확장하라. 가변 컬렉션을 프로퍼티로 노출하기보다는 컬렉션에 포함된 객체를 조작할 수 있는 메서드를 제공하라. #19 : 명확하고 .. 2017. 9. 8.
[Effective Objective-C] #24 카테고리를 사용해 클래스를 관리 가능한 다수의 조각으로 나누라 [Effective Objective-C] #24 카테고리를 사용해 클래스를 관리 가능한 다수의 조각으로 나누라 출처 : Effective Objective-C -클래스의 수많은 메서드를 파일 하나에 구현하면 비대해지기 쉽다.오브젝티브-C 카테고리를 이용해 클래스를 매우 효과적인 논리 구성 단위들로 나눌 수 있다.이렇게 하면 개발뿐 아니라 디버깅에도 도움이 된다. -@interface EOCPerson : NSObject @property (nonatomic, copy, readonly) NSString *firstName;@property (nonatomic, copy, readonly) NSString* lastName;@property (nonatomic, strong, readonly) NSArr.. 2017. 9. 7.
반응형