iOS/iOS기초(네이버edwith*obj-c)

1001-iOS앱개발 기초> 앱구조 이해

soultreemk 2022. 2. 24. 00:18

앱의 시작은 main함수 (main.m)

main함수에서 UIApplicationMain이 호출 -> 앱의 기본 설정을 확인 (.plist)  -> MainWindow.xib를 메모리로 가져옴

NSStringFromClass([AppDelegate class]) ;  ->  @"AppDelegate" 라는 클래스를 의미: 시스템에서 실행해서 시스템의 메시지를 처리하는 역할

 


** 스토리보드 이전 방식

xib파일이 화면 하나에 대한 기록을 가지고 있음

1.  info.plist파일에서 앱 실행시 storyboard가 아닌 MainWindow.xib가 켜지도록 설정을 변경

 

2. File's Owner지정: MainWindow.xib 를 누가 메모리로 load 되게 했는지? --> class에 UIApplication 지정

 

 

3. AppDelegate: 

* Delegate패턴 - UIApplication의 다양한 시스템 메시지(ex. push메시지, 사용자가 홈버튼을 눌러서 앱이 백그라운드 상태로 전환, 메모리 경고 등) 를 처리할 대상으로 지정하는 것

UIApplication의 메시지들이 담당자인 App Delegate에게 전달됨

 

4. IBOulet추가: MainWindow.xib에서 window를 땡겨오기

- AppDelegate는 화면에 window를 보여줘야 하기 때문에 Outlet으로 window를 땡겨와야 함

 

5. AppDelegate.m 파일에서 추가 초기화

didFinishLanchingWithOptions: 앱이 실행되고 모든 로딩이 끝났으니 필요한 처리를 추가하는 부분

- window가 화면에 표시되게끔 makeKeyAndVisible추가

 


<앱 구조 정리>

 

iOS 앱은 단일 window (MainWindow.xib) 위에 여러개의 view가 올라가는 구조

- view란 화면에 보이는 구성요소 (lable, button 등)

 


<UI view 설계>

 

1. window 위에 3개의 sub view (image view, label, switch) 를 올림  --> super view인 window가 life cycle을 관리

 

2. window에 추가한 3개의 view를 제어하기 위해 먼저 3개 view를 담아놓을 그릇을 멤버변수에 선언

AppDelegate.h

--> 인터페이스 빌더가 인식하도록 IBOutlet으로 연결  --> 드래그로 연결

 

 

3. 구현부에서 초기화 작업

 

** protocol 개념 : 클래스의 상속과는 관계없이 AppDelegate는 UIApplicationDelegate 프로토콜을 conforming

UIApplication이 요구하는 다양한 시스템 메신저들 (초기화 끝, 초기화 추가적으로 해, 곧 forgroud/background로 갈거야 ~ 등) 이 UIApplicationDelegate라는 프로토콜에 선언이 되어있음

-> AppDelegate가  중에서 필요한 것만 가져와 쓰는 임  (UIApplication이  Appdelegate에게 전달)

 

 

: UIApplicationDelegate문서 중 일부 -> 다양한 시스템 메신저들이 정의되어있음

 

 

 

didFinishLanchingWithOptions: 앱이 실행되고 모든 로딩이 끝났으니 필요한 처리를 추가하는 부분

여기에 멤버변수의 초기상태를 구현해줌