일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- RxCocoa
- Human interface guide
- uitableview
- MVVM
- 애니메이션
- 리펙토링
- rxswift
- UITextView
- 클린 코드
- uiscrollview
- collectionview
- map
- Clean Code
- UICollectionView
- 리팩토링
- Protocol
- Refactoring
- Xcode
- HIG
- Observable
- SWIFT
- 스위프트
- combine
- ribs
- swift documentation
- ios
- 리펙터링
- clean architecture
- swiftUI
- tableView
- Today
- Total
목록weak self (6)
김종권의 iOS 앱 개발 알아가기
1. 클로저를 사용할 때 주의할 점 - Memory Leaks, Retain Cycle, nested closure 첫 번째2. 클로저를 사용할 때 주의할 점 - nested closure 두 번째3. 클로저를 사용할 때 주의할 점 - nested closure 세 번째nested closure에서의 memory leak첫 번째 글에서 알아보았듯이, nest closure가 있을 때 외부 클로저가 아닌 내부 클로저에서 [weak self]를 잡게되면 메모리 릭이 발생// retain cycleclass Jake3 { let name = "Jake3" var closure: (() -> ())? var closure2: (() -> ())? init() { let ..
기본지식 1) capture list 개념 closure = { [weak self] in // Void)? } 그래서 보통 위와 같은 전역변수가 아닌, 함수 or 메서드에 @escaping 키워드를 붙이는 것 func someFunc(_ closure: @escaping (Void) -> Void) { } 기본지식 3) [weak self]를 안써서 memory leak을 일으키는 코드 SomeClass의 setupClosure() 메서드를 보면 closure를 assign할 때 self를 집어넣음 -> retain cycle 발생 1) SomeClass 인스턴스가 closure 프로퍼티 참조 2) closure 프로퍼티가 SomeClass 인스턴스 참조 (이 부분이 클로저 안에서 self를 참조해서 ..
1. weak self 동작 이해하기 - retain cycle이 발생하는 경우 2. weak self 동작 이해하기 - 외부에 weak self 선언하고 클로저에서 사용하는 경우 (#캡처리스트 [weak self] 리펙토링) weak self를 클로저 외부에서 사용 시 retain cycle이 발생할까? 예제를 위해 retain cycle이 발생하는 코드 준비 class A { private var closureEscaper: ((String) -> ())? func escape(closure: @escaping (String) -> ()) { print("escaping!") closureEscaper = closure } } class B { var name = "Jake" let a = A() /..
1. weak self 동작 이해하기 - retain cycle이 발생하는 경우 (#클로저, #escaping 클로저) 2. weak self 동작 이해하기 - 외부에 weak self 선언하고 클로저에서 사용하는 경우 (#캡처리스트 [weak self] 리펙토링) weak self 개념 escaping closure에서 순환 참조를 발생시키는 케이스에서 캡쳐 리스트로 weak 참조를 사용 순환참조란? 생성자가 할당 해제된 후에도 인스턴스가 할당 해제되지 않도록 하는 reference 상 순환을 이루는 상태 둘 이상의 인스턴스가 서로에 대한 strong 참조를 보유할 때 발생 구체적인 내용은 이전 포스팅 글 참고 사전지식) 클로저란? Closure(폐쇄): 클로저는 코드에서 전달 및 사용할 수 있는 2가..
사전 지식1) capture와 escaping의 개념 공통점: 둘 다 closure에서 사용되는 개념 차이점 capture: 클로저 내부에서 밖에 있는 scope의 instance를 참조하는 것 escaping: 클로저 외부에서 해당 클로저 자체를 참조하고 있는 것 사전 지식2) Escaping closure의 의미 `저장`되고, `지연`시킬 수 있는 기능 블록을 가지는 클로저가 바깥의 변수에 의해서 저장되는 경우 "Escaping closure"라고 정의 인자로 전달받은 함수 중 함수의 리턴 이후에 실행될 수 있는 함수 함수가 리턴되면 해당 scope은 사라지지만, closure는 함수의 scope을 escaping하여 함수 종료 후에 실행된다는 의미 // 함수의 return보다 completion이 ..
Closure 개념 Closure(폐쇄): 클로저는 코드에서 전달 및 사용할 수 있는 2가지의 자체 기능을 가진 블록 정의된 컨텍스트에서 모든 상수 및 변수에 대한 참조를 캡쳐하고 저장 가능 캡쳐: 자신의 블록 외부에 있는 값을 참조하는 것 자세한 내용: Closure 개념 정리 Closure의 생명주기 closure(escaping, non-escaping)은 expensive한 serial sork를 처리하므로 작업이 끝날때까지 scrop가 딜레이 closure(escaping, non-escaping)은 thread blocking 매커니즘(DispatchSemaphore) DispatchSemaphore: 카운팅 세마포어를 사용하여 여러 실행 컨텍스트에서 리소스에 대한 액세스 제어 escaping..