오늘도 돌아온 https://github.com/JeaSungLEE/iOSInterviewquestions 의 답변을 찾아보는 시간이다 ! 가보자고~~!
Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하라
Delegate란? (공식문서)
- 클래스 또는 구조체가 다른 유형의 인스턴스로 책임을 전달 또는 위임할 수 있도록 하는 디자인 패턴
- 이 디자인 패턴은 delegate라고 하는 위임(전달) 기능을 제공하도록 보장하는 프로토콜을 정의함으로써 실행됨.
- 특정 액션에 응답하거나 해당 소스의 타입을 몰라도 외부 소스의 데이터를 검색할 수 있음.
-> 객체 지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아닌, 처리해야 할 일 중 일부를 다른 객체에 넘기는 것(ex: UITableViewDelegate, UITextFieldDelegate). delegate를 설정하여 누군가에게 할 일을 넘겨주고, 특정 이벤트에 대해 어떤 일을 해줘야 하는지 작성하는 것.
이해하기 좋은 글
(https://zeddios.tistory.com/8)
retain이란 ?
- 메모리가 해제되지 않고 유지되어 메모리가 낭비되는 현상을 의미
정리해보면...
Delegate 또한 객체 간의 참조가 이루어 지기 때문에 retain cycle 현상이 발생할 수 있다. 따라서 delegate를 weak으로 선언하여 메모리가 해제될 시 자동으로 해제시킬 수 있도록 해야 한다.
해제하지 않을 경우 생기는 현상은 ..
NotificationCenter 동작 방식과 활용 방안에 대해 설명하라
너무 좋은 포스팅들이 존재하여 해당 포스팅으로 대체하겠다.
(https://sueaty.tistory.com/163), (https://daheenallwhite.github.io/ios/2019/10/13/Notification-Center/)
UIKit 클래스들을 다룰 때 꼭 처리해야 하는 애플리케이션 스레드 이름은 무엇인가?
-> Main Thread.
(스레드 : 프로세스 내에서 실제로 작업을 수행하는 주체. 모든 프로세스에는 한 개 이상의 스래드가 존재하여 작업을 수행함.
프로세스 : 실행 중인 프로그램)
애플 공식문서에서 설명하기를 UIKit 클래스는 메인 스레드 혹은 메인 dispatch queue에서만 사용하여야 한다고 나와있다.(다른 방법들이 지시되어 있지 않는 조건에서)
사실 이 부분에 대해서는 내가 명확하게 알아가지는 못했고, 애플에서 디자인적 측면을 위해 main 스레드에 UI를 잡아먹도록 만든 것이라고 한다. 성능적인 측면에서 유리하도록 하기 위함이라고.
(https://rolypolytoy.tistory.com/22, https://medium.com/remember/%EC%99%9C-ui-%EC%B2%98%EB%A6%AC%EB%A5%BC-main-thread%EC%97%90%EC%84%9C-%ED%95%B4%EC%95%BC%ED%95%98%EB%82%98-5b2ba268f4eb)
위의 링크를 참고하는 것이 좋겠다.
App Bundle의 구조와 역할에 대해 설명하라
App Bundle 이란 ?
- 개발자들에 의해 생성되는 가장 흔한 번들
- 앱이 정상적으로 작동하기 위해 필요한 모든 것들
- 플랫폼에 따라 상세한 구조는 다르지만 번들을 사용
App Bundle에 포함되어 있는 파일
- Info.plist : 앱에 대한 구성, 정보를 포함한 파일
- Excutable : 모든 앱은 실행 가능 파일이 있어야 하고 앱의 메인 진입점과 정적으로 앱 타겟에 연결된 코드가 포함
- Resources : 앱의 실행 가능한 파일밖에 데이터 파일로 존재. 이미지, 아이콘, 사운드, 문자열 파일 등이 구성됨
- Other support files : 커스텀 데이터 리소스를 iOS 앱 번들에 포함할 수 있지만, 커스텀 프레임워크 또는 플러그인은 포함할 수 없음
App Bundle 구조
- MyApp : 앱의 코드를 포함하고 있는 실행 가능한 파일. 실제 프로젝트 명
- App icons
- Info.plist
- Launch images
- MainWindow.nib : 앱 런치 시간에 앱을 로드하기 위한 기본 인터페이스 객체를 포함. 앱의 메인 윈도우 객체와 앱 델리게이트 객체를 포함
- Settings.bundle
- Custom resource files
--> iOS App Bundle은 코드와 리소스 디렉터리의 구조를 통해 개발자의 앱 개발을 도움. 이 구조는 코드나 리소스의 예측 가능한 로딩과 지역화 기능을 가능하게 해 줌.
(https://thoonk.tistory.com/64)
모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가?
UIViewController
UIViewController 클래스는 모든 viewController에 공통적인 동작을 정의.
주요 역할은
- 데이터 변화에 따라서 view 컨텐츠를 업데이트
- view와의 사용자 상호작용에 응답
- view를 리사이징 하고 전체적인 인터페이스의 레이아웃 관리
- 앱 내에서 다른 객체와의 조정
(https://melod-it.gitbook.io/sagwa/app-frameworks/uikit/view-controllers/uiviewcontroller)
다음에도 또 봐요 ~~~!
'iOS & Swift' 카테고리의 다른 글
[iOS] iOS 인터뷰 질문 - 4 (0) | 2022.08.01 |
---|---|
[iOS] iOS 인터뷰 질문 - 3 (0) | 2022.07.08 |
[iOS] SceneDelegate란 ? (0) | 2022.05.23 |
[iOS] iOS 인터뷰 질문 - 2 (0) | 2022.05.17 |
[iOS] iOS 인터뷰 질문 - 1 (0) | 2022.05.11 |