본문 바로가기

ios13

[iOS/Swift] weak self를 활용한 메모리 누수 관리 예제 살펴보기 @escaping Closure의 정의와 기능, 메모리 누수(Memory leak)까지 앞선 포스팅을 통해 살펴보았습니다. 그렇다면 실제 프로젝트에서는 어떤 방식으로 위와 같은 개념을 다루게 되며, 참조 타입인 weak을 통해 메모리 누수를 해결하는지 살펴보도록 하겠습니다. weak self는 어떤 경우에 사용하나요? 지연 할당으로 인해 순환 참조로 인한 메모리 누수가 발생될 가능성이 있는 경우 프로젝트를 진행하는 과정에서 활용되는 API Parsing 이나 Timer 와 같이 @escaping Closure를 통한 지연 할당, 즉 어떠한 동작 이후에 실시되는 행위를 구현하고자 할 경우 반드시 특정 객체에 대한 Reference, 참조가 발생하게 됩니다. 만약, 두 개 이상의 객체가 강한 참조(Stron.. 2023. 9. 30.
[iOS/Swift] 메모리 누수가 발생하는 원인과 해결방안(Strong, weak, unowned) 지난 포스팅에서 예고한 [메모리 누수]에 대한 내용을 다뤄볼까 합니다. 다만, 이번 포스팅에서는 탈출 클로저가 아닌 일반적인 예시 코드를 통해 정상적인 ARC 작동과정 메모리 누수 발생 (Memory leak) 해결 방법 위 3가지 순서로 미처 다루지 못한 메모리 누수의 원인과 해결과정을 살펴볼 예정입니다. 메모리 누수(Memory leak)와 3가지 참조유형 순환 참조(Retain Cycle)로 인하여 Reference Count가 0으로 수렴하지 않아 발생하는 문제 본론으로 들어가기에 앞서, 메모리 누수(Memory leak)에 대해 살펴볼까요? 그 전에, CS 내용 중, ARC 동작 방식에 대한 사전지식이 필요하겠지요. 메모리 누수(Memory leak)란? 둘 이상의 객체간의 강한 상호참조 관계인.. 2023. 7. 19.
[iOS/AutoLayout] 동일한 형태이나, 다른 방식의 모호하지 않은 레이아웃 만들기(Example of Nonambiguous Layout Solutions) AutoLayout 4번째 포스팅을 시작해보도록 하겠습니다. 지난 포스팅에서 다룬 '모호하지 않은 레이아웃(nonAmbiguous Layout)'에 이어, 1개 뷰의 레이아웃이 아닌, 2개의 UIView간의 관계를 설정하는 과정을 살펴볼까 합니다. 아래서 다룰 예시는, 제약을 위한 절대적인 해답이 아닌 모호하지 않은 레이아웃을 만들기 위한 다양한 방식 중 하나이므로 추후 원하는 화면을 구현하기 위한 참고용으로서 확인하시길 바랍니다. 모호하지 않은 레이아웃 만들기 (2) 상위 뷰(혹은 Container), 그리고 인접 뷰(neighborhood)와의 관계를 통한 AutoLayout 완성 앞서 언급한 바와 같이, 이번 포스팅에서는 2개의 UIView가 활용되는 AutoLayout을 연습해보고자 합니다. .. 2023. 7. 14.
[iOS/Swift] Non-Escaping Closure 와 Escaping Closure(@escaping) 아래 코드는 흔히 프로젝트를 진행하며 활용하고, 마주치게 되는 비동기 처리 혹은 네트워크 관련 메서드입니다. func fetchGithubProfiles(username: String, completion: @escaping (Result) -> Void) { // ... do { let decoder = JSONDecoder() let profiles = try decoder.decode(GithubProfile.self, from: data) completion(.success(profiles)) } catch let error { completion(.failure(NetworkError.decodingError(error))) } } 위 fetchGithubProfiles 메서드의 completi.. 2023. 7. 6.
[iOS/AutoLayout] 명확한 Layout을 위한 지침이자 제약, 모호하지 않은 레이아웃(Nonambiguous Layouts) 지난 포스팅에서 다룬 내용을 간략하게 짚고 넘어가볼까 합니다. UIKit에서 Storyboard 혹은 코드를 활용하여 뷰를 구성할 때, 일종의 '제약(Constraints)'을 설정함으로서 AutoLayout을 완성하게 됩니다. 구체적으로 제약이란, 1️⃣ 사이즈 혹은 위치를 나타내는 속성(Attributes) 2️⃣ 등호(=)를 통해 각 뷰간의 관계를 나타내는 방정식(Equations) 위 2가지 요소를 토대로 제약을 정의하게 됩니다. 이번 포스팅에서는 위에서 학습한 속성과 방정식을 활용, 올바른 제약 혹은 관계를 설정하기 위한 레이아웃을 나타내는 '모호하지 않은 레이아웃(Nonambiguous Layouts)' 에 대한 예시를 살펴볼까 합니다. 모호하지 않은 레이아웃 만들기 (1) 컴퓨터에게 정확한.. 2023. 6. 28.
[iOS/UIKit] TableView와 CollectionView는 어떤 차이가 있나요? UIKit을 활용하여 특정 데이터를 리스트 형식으로 나타내고자 할때, 'TableView' 과 'CollectionView' 중 어느 것을 활용해야 할지 고민하기 마련입니다🫨 추후 프로젝트를 진행하는데 앞서, 고민할 시간을 줄이고 효율적인 선택을 하기 위해 이번 포스팅에서는 두 컴포넌트의 정의와 기능을 짚고 넘어가볼까 합니다. (각각의 컴포넌트 별 생성과정과 레이아웃 과정은 별도의 포스팅에서 다룰 예정입니다) 리스트를 나타내는 모습 (Overview) 앱의 성격과 디자인을 고려하여 리스트 방식을 나타내는 적절한 View를 선택 네트워크에서 받아오거나 혹은 임의로 만든 데이터를 앱의 화면을 통해 보여주고자 할 때, 아래와 같이 다양한 형태로 나타낼 수 있습니다. 앱 혹은 화면(Scene)별 데이터를 전.. 2023. 6. 27.