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 메소드 내에 초기화를 처리하면?
뷰 컨트롤러가 화면에 표시될 때, 생성되어 메모리 소모를 줄일 수 있음