iOS/UIKIT

객체 선언과 동시에 초기화 = "메모리 남아도냐"

밤새는 탐험가89 2024. 1. 29. 12:07

 

 

 

만약에 변수를 선언과 동시에 초기화한다면?

import UIKit

class ViewController: UIViewController {
    
    var subject = UILabel()   // 선언과 동시에 초기화

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.subject.frame = CGRect(x: 100, y: 100, width: 250, height: 300)
        self.subject.backgroundColor = .systemRed
        
        self.view.addSubview(subject)
    }
}

 

 

 

이렇게 해도 상관은 없지만?

레이블의 인스턴스 생성시기가 문제임

 

선언과 초기화를 분리하여 

viewDidLoad() 메소드 내에 초기화 구문을 작성한다면?

 

 

import UIKit

class ViewController: UIViewController {
    
    // var subject = UILabel()   // 선언과 동시에 초기화
    var subject: UILabel!  // 선언만

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.subject = UILabel(). // 초기화 
        
        self.subject.frame = CGRect(x: 100, y: 100, width: 250, height: 300)
        self.subject.backgroundColor = .systemRed
        
        self.view.addSubview(subject)
    }
}

 

 

 

subject 레이블 인스턴스가 생성되는 시점은 뷰 컨트롤러가 로드 될 때임

즉, 뷰 컨트롤러가 화면에 표시되는 시점에 인스턴스가 생성됨

 

 

근데 멤버 변수를 선언하면서 동시에 객체를 초기화한다면?

뷰 컨트롤러의 인스턴스가 생성되는 시점에 레이블 인스턴스도 생성

 

만약에, 뷰 컨트롤러의 인스턴스만 생성한 후 화면에는 이동하지 않을 경우

그렇다면 아직 쓰지도 않을 레이블 인스턴스가 생성되어 메모리를 차지함

 

 

따라서 viewDidLoad 메소드 내에 초기화를 처리하면?

뷰 컨트롤러가 화면에 표시될 때, 생성되어 메모리 소모를 줄일 수 있음 

 

 

'iOS > UIKIT' 카테고리의 다른 글

내비게이션 타이틀 커스터 마이징하기  (0) 2024.01.31
탭바 숨기기  (0) 2024.01.30
CGPoint + CGSize = CGRect  (1) 2024.01.28
리소스 접근 권한 설정 (카메라, 앨범)  (0) 2024.01.25
iOS 화면 표현 구조  (1) 2024.01.22