iOS : AppDelegate 에 변수저장

버들비·2020년 9월 3일
0

iOS

목록 보기
1/5
post-custom-banner

example : 메모 앱

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
	var window: UIWindow?
    var memoList: [MemoData]()
    ...
}

memoList 변수를 AppDelegate 에 저장하는 이유

  • memoList 는 앱의 여러 객체가 참조하는 공유 데이터이다. 어플리케이션 사용 도중에 메모리 관리 이슈나 객체의 소멸로 인해 데이터가 삭제되면 안된다. 또한 여러곳에서 사용하더라도 일관성을 유지할 수 있도록 파편화되거나 쪼개어지지 않아야 한다.
  • memoList 변수를 뷰 컨트롤러에 저장할 경우, 뷰 컨트롤러 생명 주기가 끝날때 같이 소멸해 버린다. 뷰 컨트롤러는 사용자가 화면을 전활할때 생성되었다가 이전화면으로 복귀하면 소멸한다.
  • 컨트롤러 클래스는 하나 이상의 인스턴스가 생성될 가능성을 갖고 있다. 스토리보드에 있는 N개의 뷰 컨트롤러가 모두 동일한 클래스에 연결되어 있다면, 같은 클래스에서 여러개의 인스턴스가 생성될 수 있다. 이런 경우 memoList 변수가 인스턴스 개수만큼 생기기에 문제가 생길 수 있다.

AppDelegate 클래스는 앱 전체의 라이프 사이클을 관리하는 앱 델리게이트 역할을 하기때문에, 반드시 하나의 인스턴스만 존재한다. 또한 앱 델리게이트 객체는 앱 자체의 생명주기를 함께 하기에 중간에 소멸되지 않는다.

UIApplication 객체는 사용자가 직접 인스턴스를 생성할 수 없으며 UIApplication.shared 타입 프로퍼티를 통해 참조할 수 있다.

UIApplication.shared.delegate

reference

꼼꼼한 재은 씨의 Swift 실전편

post-custom-banner

0개의 댓글