- Xcode의 기본 컴파일러: LLVM(Low Level Virtual Machine)
- 정적 분석기(Static Analyzer) : 애플의 LLVM 컴파일러 기술을 이용해 코드 분석 및 버그 찾음 - Objective-C는 nil 객체에 메시지를 보내어도 죽지 않는다 (다만 실행이 안될뿐)
- 지정된 초기화 메서드(Designated Initializer): 사용자 정의 초기화 메서드
NSObject
- (id)init : receiver 초기화
- (BOOL)isEqual:(id)anObject : 포인터 비교
- Cocoa 클래스들의 초기화 메서드는 초기화 불가능하다면 nil return
- (id)init {
self = [super init];
if (self) {
...
}
}
isa: 객체를 생성하는 클래스 구조체를 가리키는 포인터
- Objective-c 메시지 동작 방식: NSObject에는 isa라는 인스턴스 변수가 존재
- 클래스 구조체
- 클래스의 인스턴스 변수 유형과 이름
- 클래스 메서드의 구현
- 슈퍼클래스의 클래스 구조체를 가리키는 포인터
Selector : 클래스의 메서드 찾기
-
각 메서드 이름 - 유일한(unique) 정수로 연결
ex) [application respondsToSelector:@selector(registerUserNotificationSettings:)] -
컴파일할 때 컴파일러는 메시지를 보내야하는 곳에서 selector를 연결
- 동작 방식
[myObject addObject:yourObject];
=> objc_msgSend(myobject, 12, yourObject); // (addObject:의 selector는 12라고 가정)
1) objc_msgSend()는 myObject의 isa 포인터에서 클래스 구조체를 가져옴
2) 클래스 구조체에서 12에 연결된 메서드 찾음 (없다면 슈퍼클래스로 가서 찾고 아예없으면 예외 처리)
'iOS > iOS 기본기' 카테고리의 다른 글
[iOS] @property / @sythesize / @dynamic (0) | 2019.11.24 |
---|---|
[iOS] 메모리 관리 - ARC / Strong reference cycle / Zero weak reference (0) | 2019.11.24 |
[Apple Document] iOS - The App Life Cycle (0) | 2019.11.21 |
[iOS] 현재 뷰 컨트롤러가 모달(Modal)인지 체크해보쟈 (0) | 2016.11.23 |
[iOS] 앱 버전 체크 (App Version Check) (0) | 2016.11.10 |