본문 바로가기

iOS/Swift40

[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/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/Swift] 유용한 대표 고차함수, map, filter, reduce 다루기 요 근래 코딩테스트를 슬쩍 건드려 보구 있는데 말입니다😨 배열 관련 문제를 풀때, 고차함수를 활용하는게 여간 손에 익질 않아 길고 긴 하드 코딩으로 꾸역꾸역 통과하는 경우가 많았는데요.. 그래서, 이번 포스팅에서는 배열을 다룰때 자주 활용되는 map, filter, reduce 예시 코드를 통해 정리해보는 시간을 가져볼까 합니다. 근데, 고차함수가 무엇인가요? 다른 함수를 ①매개변수로 받거나, ②함수의 결과를 반환하는 함수 매개변수로 받고, 함수의 결과로 받는다라.. 이전에 다뤘던 클로저의 1급 객체함수의 특징과 비슷하지 않나요? 고차함수란 Swift에서 이미 제공되고 있는 표준 라이브러리로서, 함수형 패러다임을 지원하는 Swift에서는 다양한 고차함수를 사용할 수 있습니다. 주로 사용하는 map,.. 2023. 4. 5.
[iOS/Swift] Extension(확장)을 통한 타입에 새로운 기능 부여하기 오랜만에 Swift 문법 포스팅으로 돌아왔습니다🥳 요 근래 UIKit을 활용해 클론 프로젝트를 진행하다보니, ViewController에 기능을 더하는 extension 기능을 자주 사용하게 되더군요! 해서, Extension에 대해 간단하게 살펴보는 포스팅을 시작해볼까 합니다. Extension(확장)이란? 구조체, 클래스, 열거형, 프로토콜 타입 등 새로운 '기능'을 추가 우리가 자주 사용하는 Chrome Browser에서의 확장 프로그램과 같이 기존에 이미 만들어진 무언가에 새로운 '기능'을 더하는 의미로 이해하시길 바랍니다. Swift에서의 Extension은 클래스, 구조체, 열거형 등의 타입으로 만들어진 무언가에 프로퍼티, 메서드, 초기값을 확장시키는 기능을 가지고 있습니다. 심지어, 프로토콜.. 2023. 3. 23.
[iOS/Swift] 타입에 의존하지 않는 범용코드, 제네릭(Generic) SwiftUI를 다루던 도중, body 메서드가 채택하는 요상한 some View 이름의 타입을 발견하게 되었는데요.. 해당 타입을 '불 투명 반환타입(Opaque return type)', 또는 '역 제너릭 타입' 이라고 불린다 카니.. 부랴부랴 급하게 제네릭(Generic)에 대한 포스팅을 들고 왔습니다. 제네릭(Generic)이란? 특정 타입에 의존하지 않는, 유연한 코드를 위한 Swift의 강력한 도구 중 하나 제네릭(Generic)의 사전적 정의는 다음과 같습니다. Generic 포괄적인, 총칭의, 이름이 붙지 않은 '일반적'이란 뜻의 'General'과 동일한 어원 Swift 표준 라이브러리의 대다수는 이러한 '제네릭'으로 선언되어 있으며, Collection Type 중, Array와 Dic.. 2023. 3. 12.