일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Xcode
- combine
- SWIFT
- ribs
- ios
- uitableview
- swift documentation
- tableView
- 스위프트
- 리펙토링
- Observable
- 리펙터링
- 클린 코드
- UITextView
- HIG
- MVVM
- Human interface guide
- 애니메이션
- Refactoring
- Clean Code
- swiftUI
- map
- Protocol
- UICollectionView
- rxswift
- RxCocoa
- clean architecture
- uiscrollview
- collectionview
- 리팩토링
- Today
- Total
목록capture list (4)
김종권의 iOS 앱 개발 알아가기
기본지식 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) capture와 escaping의 개념 공통점: 둘 다 closure에서 사용되는 개념 차이점 capture: 클로저 내부에서 밖에 있는 scope의 instance를 참조하는 것 escaping: 클로저 외부에서 해당 클로저 자체를 참조하고 있는 것 사전 지식2) Escaping closure의 의미 `저장`되고, `지연`시킬 수 있는 기능 블록을 가지는 클로저가 바깥의 변수에 의해서 저장되는 경우 "Escaping closure"라고 정의 인자로 전달받은 함수 중 함수의 리턴 이후에 실행될 수 있는 함수 함수가 리턴되면 해당 scope은 사라지지만, closure는 함수의 scope을 escaping하여 함수 종료 후에 실행된다는 의미 // 함수의 return보다 completion이 ..
ARC 앱의 메모리 사용량을 추적하고 관리하는 방법 인스턴스가 생성될 때마다 ARC는 해당 인스턴스에 대한 정보를 저장하기 우해 메모리 청크를 할당 ARC는 strong reference를 통해, 현재 사용중인 instance가 메모리 해제되지 않도록 유지 ARC는 현재 인스턴스를 참조하는 속성, 상수, 변수의 count를 추적 > count가 하나 이상 존재하는 한 인스턴스를 할당해제하지 않는 것 ex) class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print("\(name) is being deinitialized") } } var re..