만약에 변수를 선언과 동시에 초기화한다면?
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 |