목록iOS 개발 (21)
어쩌다보니 iOS 개발자
1. 프로퍼티 점 문법과 접근자 메서드를 통해 인스턴스 변수 접근 _fullName = @"임동민"; 2. 직접 접근 방법 self.fullName = @"임동민"; 위 두가지 방법은 몇 가지 차이점이 있다. 1. 직접 접근 방법이 확실히 빠르다. 메서드를 접근하지 않고 직접 메모리에 접근하는 코드를 만들어 처리한다. 2. 직접 접근 방법은 세터에 정의된 메모리 관리 시맨틱을 무시한다. 예를 들어 프로퍼티가 copy 속성으로 정의되었더라도 인스턴스 변수를 직접 설정하면 복사본을 만들지 않을 것이다. 새로운 값은 리테인되고 이전 값은 릴리즈 된다. 3. 인스턴스 변수에 직접 접근하면 키-값 관찰(Key-Value Observing: KVO)알림이 발생하지 않을 것이다. 4. 프로퍼티를 통해 접근하면 프로퍼..
@property 로 선언한 변수는 1. 자동으로 _(언더바)를 접두어로 붙인 인스턴스 변수 클래스를 생성한다.2. setter, getter 메소드를 자동으로 생성한다. 프로퍼티 속성 총 4가지 속성을 적용할 수 있다. 1. 원자성(nonatomic, atomic) 디폴트 값은 atomic 2. 읽기/쓰기readwrite 게터, 세터 모두 사용한다.readonly 게터만 사용한다. 3. 메모리 관리 시맨틱 데이터의 구체적인 소유권 시맨틱오직 세터에만 해당된다.예를 들면 세터는 새로운 값을 리테인 해야 하나? 아니면 간단히 하부의 인스턴스 변수에 할당만 해야 하나? assign, strong, weak, unsafe_unretained, copy 4. 메서드 이름 기억할 점iOS 에서는 nonatomic..
보통 뷰 지속시간 또는 반복 횟수 등을 정의할 때 상수를 사용한다. #define ANIMATION_DURATION 0.3 define은 전처리 지시어로써 ANIMATION_DURATION의 문자열에 발견될 때 마다 0.3으로 치환할 것이다.그리고 헤더파일에 선언을 한다면 그 헤더파일이 사용되는 모든 곳에서 치환을 할것이다. 이 문제를 해결하기 위해서는 컴파일러를 활용해야 한다. 예를 들면 1. 상수로 정의를 하여 static const NSTimeInterval kAnimationDuration = 0.3;타입 정보 NSTimeInterval 를 본다면 정확히 이 상수가 무엇을 의하는지 확실히 알 수있다. 이러한 습관은 코드를 읽는데 많은 도움이 되며, 하나의 좋은 습관으로 자리 잡을 것이다. 2. 만..
오브제티브-C는 헤더파일과 구현파일이 나누어져 있다.확장자가 .h가 헤더파일이며 .m은 구현파일이다. 만약 헤더파일에 헤더를 포함한다면, 1. 컴파일 시간이 늘어난다.2. 상호 종속이 생겨 유지보수가 복잡해 진다. 해결 방법최대한 포워드 선언을 하라. 포워드 선언이란, 헤더에 필요한 객체를 참조할 수 있게 할 때 #include, #import 가 아닌 @class 로 선언하여 사용한다.
오브젝티브-C가 C++, JAVA와 같은 객체지향 언어와 비슷하지만 가장 큰 다른점 - 함수 호출이 아닌 메세징 구조를 사용한다. -> 함수 호출은 컴파일러가 어떤 코드를 실행할 지 정하지만, 메세징 구조는 런타임이 실행할 코드를 정하는 것이다.- 오브젝티브-C 객체는 스택에 할당하는 것이 허용되지 않는다. -> 객체의 메모리는 항상 스택이 아닌 힙공간에 할당 된다.- 인스턴스는 항상 유일하다. -> 하나의 인스턴스를 가르키는 두개의 변수가 있을 수는 있지만, 동일한 인스턴스가 두개가 있지는 않다.- 인스턴스의 힙 영역에 할당된 주소는 변수가 가지고 있으며, 그 변수는 스택 메모리에 할당된다.