@State, @Binding, @Environment, @StateObject, @EnvironmentObject에 대한 리뷰.
value 타입, 구조체
@State : Source of truth //
@Binding : values come from a parent view // 부모 뷰로부터 전달 받은 value (read, write 모두 가능)
- read-only로 전달할 경우, 바인딩 없이 전달 가능
@Environment : environment value persists within the subtree of the view
그림으로 표현했을 때 다음과 같이 생각됨.

reference 타입, 클래스
@StateObject - @ObservedObject의 관계는 구조체의 @State와 @Binding과 같은 방식
@StateObject의 경우, initialize가 한번만 이루어진다. 뷰가 다시 그려지더라도 초기화가 또 이뤄지진 않음.
@EnvironmentObject는 view의 서브 트리 내에서는 데이터 접근이 가능해진다. more flexible access
wwdc2020에 도식화된 상태로 설명이 정말 잘 되어 있는데, 뷰 트리의 일부에서만 특정 데이터에 접근하고자 할 때,
인스턴스를 생성해 전달하지 않고, 프로퍼티 래퍼를 통해 접근이 가능하다.



https://developer.apple.com/videos/play/wwdc2020/10040/
@StateObject나 @EnvironmentObject wrapper을 사용하기 위해서는 ObservableObject 프로토콜을 채택한 클래스에서만 가능함

+ 클래스 객체를 @State 프로퍼티 래퍼를 사용해 선언한 경우, value가 메모리 주소에 해당하게 된다.
따라서 값이 변할 때가 아닌 메모리 주소가 변경됐을 때만 뷰가 다시 그려지게 된다.
'IOS' 카테고리의 다른 글
Swift Objective C 네임 맹글링(Name Mangling) 문제 (0) | 2024.06.24 |
---|---|
iOS build fail User Script Sandboxing sandbox: rsync.samba(12741) deny(1) (0) | 2024.06.02 |
iOS UIKit 스토리 보드 없는 프로젝트 생성 (setup root programmingly) (0) | 2024.05.27 |
iOS @available 속성 설정 (0) | 2024.04.23 |
new Framework(*) Unreal Engine에서 iOS Framework 적용하기 (0) | 2024.04.09 |