본문 바로가기

Swift

클래스 내에 멤버 변수를 사용할 때 초기화 시점에 따른 메모리 차지

반응형

비교 인스턴스

  1. label1 은 선언과 동시에 초기화
  2. label2 은 선언과 초기화를 분리하고 viewDidLoad 에서 초기화

설명

  • 프로그래밍 방식의 UI 생성을 연습하기 위해 작성한다면 아래와 같은 코드는 큰 차이점이 없습니다.
  • 하지만 뷰 컨트롤러의 인스턴스만 생성한 후 화면으로 이동하지 않는다면 label1 인스턴스는 메모리만 차지하게 됩니다. 반면, label2 인스턴스는 뷰 컨트롤러가 화면에 표시될 때 인스턴스가 생성되므로 메모리를 미리 차지하지 않습니다.
  • 즉, 특별한 경우를 제외하고 클래스 내에 멤버 변수로 인스턴스를 사용한다면 label2 처럼 사용하기 직전에 인스턴스를 생성하여 메모리를 할당 받는 것이 메모리를 효율적으로 사용할 수 있습니다.

코드

#import UIKit
class CustomViewController: UIViewController {
    var label1 = UILabel()
    var label2: UILabel!

    override func viewDidLoad() {
        self.label1.frame = CGRect(x: 10, y: 50, width: 100, height: 30) 
        self.label2 = UILabel()
        self.label2.frame = CGRect(x: 10, y: 100, width: 100, height: 30)

        self.view.addSubview(label1)
        self.view.addSubview(label2)
    }
}

참고

꼼꼼한 재은 씨의 스위프트 실전편

반응형