Objective-C를 공부하기 전에
edwith에서 설명해준 영상을 보고 정리했습니다.
앱이 처음 시작하면 main 함수가 처음 실행 된다.
👉 그럼 main.m 안에 있는 UIApplicationMain 이라는 api가 실행 된다. 이 친구가 하는 역할은 기본적인 설정을 확인한다. 내가 시작점이 어디인지 그 엔트리 포인트를 확인한다.
👉 그러면 main.storyboard 를 찾는다. 그건 plist 안에 있음. UIApplicationMain는 plist를 참조한다. plist 는 main 스토리보드를 알려준다.
👉 마지막에 NSStringFromClass([AppDelegate class])가 있는데 AppDelegate 클래스를 만드는거다. (시스템에서 실행해서 시스템에서 처리한다는 소리임). 여기를 nil 을 넣어주면 앱에 아무것도 안뜨고 까만 화면이다.
(storyboard, AppDelegate, launchscreen 다 삭제하고 empty xib 추가했음 👉 UIWindow 새로 만들었음 👉 file’s owner 에 class 타입을 UIApplication로 지정해줌)
메인함수를 통해서 UIApplication 메인 윈도우가 메모리에 로드가 됐고, 걔를 로드한 애가 UIApplicationMain 이니까 UIApplication 이라는 객체가 되는군!
iOS Runtime Module (OS)
앱 실행 👉 main으로 메인함수 만들어짐 👉 plist 👉 메인 윈도우 👉 file’s owner 가 UIApplication임 👉 UIApplication가 만들어졌다! 👉 Delegate로 AppDelegate를 지정 👉 윈도우로 UIWindow 지정
👉 모든 로딩 끝나면 추가적인 메시지 수행하라고 AppDelegate 파일에서 didFinishLaunchingWithOptions 라는 메시지 보냄 👉 윈도우를 실행하는걸 추가해줘서 실행 된다.
단일 window 위에 여러가지 view (ex. label, button)를 얻는 형식.
클래스의 상속과는 상관없이 UIApplicationDelegate이라는 프로토콜 안에 여러가지 메소드가 선언 되어 있으면 우리가 거기서 가져다가 쓰면 된다. 다양한 시스템 메시지들이 들어있다.
(UIApplicationDelegate 안에는 willappear, disappear 등 이벤트 메시지들이 들어있다.)
약속은 프로토콜로 정의되어 있다.
didFinishLaunchingWithOptions 안에서 프로퍼티 초기화 가능
[switchnow setOn:TRUE]; : switchnow 에 setOn이라는 메시지를 전달하고 있다~ 라는 뜻
@ : 핸드컷
(객체를 넣을려면 객체 만들고 거기에 써주고 해야하는데 @을 치게되면 “문자열 객체다.” 라고 알려주는 것임)
팩토리 메소드 : 내가 사용할 인스턴스를 생성해주려고 사용한다.
붕어빵 : 인스턴스, 붕어빵틀 : 클래스, 붕어빵 틀을 여는 행동 : 클래스 인스턴스
클래스에 클래스 인스턴스가 들어있음. +는 클래스 인스턴스, -는 그냥 인스턴스