순환 참조를 방지하기 위해 모든 경우에 약한 참조를 해도 될까?
결론 : 그렇게 하면 안된다. 이유 약한 참조일 경우 객체가 필요한 시점에 이미 메모리에서 해제되기 때문에 nil참조를 하게 되고 오류가 발생함. 강한 참조는 객체의 수명을 제어하기 때문에 강한 참조가 필요함. 순환 참조가 발생할 경우에만 약한 참조 실행. 순환 참조가 발생하는 경우 ```swift class MyCl...
결론 : 그렇게 하면 안된다. 이유 약한 참조일 경우 객체가 필요한 시점에 이미 메모리에서 해제되기 때문에 nil참조를 하게 되고 오류가 발생함. 강한 참조는 객체의 수명을 제어하기 때문에 강한 참조가 필요함. 순환 참조가 발생할 경우에만 약한 참조 실행. 순환 참조가 발생하는 경우 ```swift class MyCl...
1. 값 타입은 ‘복사’ , 참조 타입은 ‘바로가기’ 값 타입: 변수에 저장시 인스턴스를 복사하여 변수에 저장 참조 타입: 변수에 저장시 인스턴스를 힙 메모리(메모리 누수 디버깅 가이드 참조)에 저장하고, 그 메모리 주소값을 변수에 저장 2. 값 타입은 불변성이 있다. 값 타입은 매번 복사되기 때문에 데이터가 바뀌지 않음. 참...
RxSwift BehaviorRelay란? BehaviorRelay는 최신 값을 항상 저장하고, .value로 읽을 수 있는 RxSwift의 래퍼(Wrapper) 객체입니다. 값을 변경할 때는 .accept()를 사용하며, BehaviorSubject와 다르게 .completed 또는 .error 상태가 없습니다. RxSw...
1. RxTableViewSecionReloadDataSource 생성 RxDataSource는 데이터의 섹션과 셀을 정의하는 클로저를 통해 UITableView를 관리합니다. let dataSource = RxTableViewSectionReloadDataSource<SectionModel<String, String>>...
PublishRelay는 PublishSubject를 대체하는 Relay타입으로, 초기값 없이 이벤트를 방출하며, 새로운 구독자는 새로운 값부터 수신합니다. .accept로 값을 추가하고, .completed나 .error없이 동작합니다. 사용 예제 import RxSwift import RxRelay let relay = Publi...
BehaviorRelay는 내부적으로 BehaviorSubject를 감싸고 있기 때문이다. BehaviorRelay는 Relay 타입이지만, 내부적으로 BehaviorSubject를 사용하여 동작 BehaviorSubject는 Observable 프로토콜을 준수하므로, subscribe를 사용 가능 즉, BehaviorRelay 자체가 ...
switch case에 case(let response) 라는 형태에 대한 문법적인 설명 예제 코드 enum Result<T> { case success(T) case failure(Error) } let result: Result<String> = .success("데이터 로딩 성공") switch resu...
Set은 순서가 없고, 중복을 허용하지 않는 컬렉션 타입이다. 탐색 속도가 배열에 비해서 빠르다. 특정한 순서없이 저장되기 때문에 반복문을 사용할때마다 순서가 달라진다. Set 선언 및 초기화 var numbers: Set<Int> = [1, 2, 3, 4, 5] print(numbers) // 출력 예시: [5, 3, 1, 2...
Swift에서 해시(Hash)의 개념과 사용 예제 1. 해시(Hash)란? 해시(Hash)는 데이터를 해시 함수(Hash Function)를 사용하여 고유한 숫자로 변환한 후, 해당 숫자를 기준으로 값을 저장하고 검색하는 방식이다. Swift에서는 Set과 Dictionary가 내부적으로 해시 테이블(Hash Table)을 사용하여 데이터를 ...
UIScrollView의 내부 함수로써 뷰를 밑으로 당기는 동작을 했을때 나타나는 로딩 인디케이터 (:loading:) 내부 코드 @MainActor open class UIRefreshControl : UIControl { public init() open var isRefreshing: Bool { get } open...