일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Swift #try #catch #Swift Concurrency 에러처리 #에러처리 #Error #Error Handling
- Multiple Window #iPad
- swift concurrency #swift #concurrency #async #async let #swift parallel #병렬실행 #동시실행 #이미지 동시 다운로드 #iOS #UIKit
- deinitialize #스위프트 #Swift #ARC #메모리 #memory #closure #클로저 #클로저 메모리 #weak #weak self #self #unowned self #memoryleak #메모리릭
- 백준#5719번#
- Autolayout #
- ARC #unowned #weak #weak unowned차이 #순환참조 #Strong Reference Cycle #Swift #메모리 #memoryLeak
- #IntrinsicContentSize
- COW #Copy On Write #Swift #Optimization
- notification #
- Swift #UIkit #ARC #Reference count #memory leak #memory #leak #애플 #iOS
- Struct #Value Type #Value #Reference #Reference Type #Class #Structure #memory
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 거의최단경로 #5719번반례 # 백준반례 #백준플4 #플레4
- Compression resistance
- Hugging priority
- Multitasking #
- OS #Page #Page Table #Virtual Memory
- Swift Concurrency #동시성 프로그래밍 #async #await #async let #group Task #병렬 실행 #동시 다운로드
- async #await #swift Concurrency #concurrency #actor #concurreny 원리 #concurreny 개념
- Autolayout 충돌
- UI그리기
- UIKit기본
- AR #Augmented Reality
- ARC #Swift #Memory leak #weak self #unowned self #weak self 이유 #reference count #순환 참조 #retain cycle #delayed #deinitialization #지연 해제 #delayed deinitialization
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 알고리즘
- IntrinsicContentSize #UIKit #Swift #hugging priority #conflict resistance #Ambiguous
- ARC #weak #unowned #Strong Reference #Strong Reference Cycle #순환참조 #Swift #메모리 #memoryLeak #메모리릭
- Multitasking #life Cycle
- Today
- Total
목록Programming (39)
도니의 iOS 프로그래밍 세상
밑의 내용은 “오브젝트” 도서를 읽고 본인이 이해한 내용을 정리한 글입니다. 실제 내용과 다를 수 있습니다. 의존성객체 지향 설계에서, 객체간 협력은 필수적이나 과도하게 많은 협력은 추후 변경을 어렵게 한다.객체간의 협력은 객체간 정보를 가지고 있어야 하며, 이는 의존성이라고 부른다.잘못된 의존성은 유연한 설계를 방해하는 요소이다.1. 의존성의 이해의존성 전이캡슐화 여부에 따라 의존성이 전이된다.ex. PeriodCondition → Screening → Movie으로 의존성 구조이때, Screening이 캡슐화를 올바르게 처리하지 않으면 PeriodCondition은 Move에 의존하는 구조를 가질 가능성이 매우 높음의존성 해결 방법객체 생성 시점에 생성자에 의존성 주입객체 생성후 의존성 주입→ 생성 ..
밑의 내용은 “오브젝트” 도서를 읽고 본인이 이해한 내용을 정리한 글입니다. 실제 내용과 다를 수 있습니다. 추상화 문제 해결의 핵심만 남기는 작업 핵심을 남기기 어렵다면, 문제의 크기를 더욱 작은 문제의 단위로 나누는 작업인 분해를 실행 목차 Procedure 추상화, Data 추상화 Procedure 추상화의 문제점 ADT(Abstract Data Type) 결론 1. Procedure 추상화, Data 추상화 추상화의 두가지 종류 프로시저 추상화는 무엇을 해야 하는지에 대한 추상화 이전에 배웠던 대로 메서드를 통해서 추상화 하는 방식(ex. 가격을 계산하라) 데이터 추상화는 무엇을 알아야 하는지에 대한 추상화 이전과 달리, 메서드가 아닌 struct등이 추상화 됨 이전 추상화는 대부분 메서드의 추상..
함수형 프로그래밍에서 사용되는 말인 Monad에 대해서 설명하기 전, map 과 flatMap 의 차이점에 대해서 공부해보자 map과 flatMap은 차이점은 무엇일까? 가장 기본적인 차이점 map의 경우 데이터를 변환하는데 사용된다 let cast = ["Vivien", "Marlon", "Kim", "Karl"] let lowercaseNames = cast.map { $0.lowercased() } // 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"] flatMap은 2차원 이상의 배열들을 1차원 배열로 변환한다 let numbers = [1, 2, 3, 4] let mapped = numbers.map { Array(repeatin..
지난 시간에는 async let을 사용하여, concurrent하게 이미지를 다운로드 받는 방법에 대해 알아보았습니다. 이번시간에는 전부 async let을 처리하는것이 아닌, group Task라는 기능을 이용하여 작업을 병렬적으로 실행하는 방법에 대해서 이야기하겠습니다. 지난 포스팅을 보지 않으셨다면, async let(3)를 보고 오시면 이해가 더욱 쉽습니다. Group Task가 필요한 이유 async let은 비교적 간단하게 병렬적으로 이미지를 다운받을 수 있는 기능입니다. 하지만, async let의 한계는 static하게 결정된 task에서만 사용이 가능하다는 것입니다. 위 코드에서 보듯, 분명하게 두개의 child task가 생성될 거라는 점이 컴파일 시점에서도 이를 명확하게 알 수 있습니..
이번 시간에는 swift concurrency에서 Parallel 실행을 지원해주는 기능인 async let에 대해서 배워보도록 하겠습니다. 결론적으로 말하자면, 해당 기능을 사용함으로써 Serial하게 동작되었던 async 함수들이 Concurrent하게 실행 되도록 합니다. 기존 Async함수 호출시 문제점 우리는 async await 기술을 사용하여, 중첩된 클로저를 사용한 위의 코드를 밑의 코드와 같이 더욱 간결하게 바꿀수 있게 되었습니다. 하지만, 여기서 한가지 문제점이 떠오릅니다. 만약 수백개의 사진을 다운받는 코드라고 가정한다면 위의 코드는 어떻게 작동할까요? 위의 예제와 같이 순서대로 사진을 다운로드 받습니다. 좀더 간단한 용어로 표현하자면 “Serial(동기)”하게 작동되는 형태입니다. ..
이번시간에는 Autolayout간의 충돌을 해결할 수 있는 hugging priority, compression resistance에대해 알아보겠습니다. 두가지 키워드의 정의 및 사용법을 익히기 전 왜 필요한지에 대해 배우겠습니다. 필요한 이유 TextField와 Button이 동일선상에 위치합니다. TextField와 Button는 밑의 그림과 같이 서로 붙어있습니다. Autolayout은 에러없이 정상적으로 동작합니다. 하지만, 이때 TextField가 글자가 많아진다면 어떻게 될까요? 서로 고유크기를 지키면서 Autolayout까지 지키려고 했기 때문에 에러가 발생했습니다. 만약 본인이 컴퓨터라면 둘중 어떤 크기를 줄이고, 어떤 크기를 그대로 둘것인가요? “제일 첫번째 그림과 같이 TextField..
Try - Catch 공부배경 Swift Concurrency에서 가장 큰 장점중 하나는 에러처리입니다. 기존에 Result Type을 사용하거나, nil을 completion handler를 통해서 전달할 필요가 없어졌기 때문입니다. 단순히 async함수에 throws라는 키워드만 붙임으로써 보다 간단하고 실수없는 에러처리를 할 수 있습니다. async 함수를 잘 적용하기 위해서 try catch가 언제 작동하며, 이들이 언제 에러를 전달하고 시스템 종료를 유발시킬수 있는지 알아야 합니다. Swift Error Handling 에러 던지기(Throwing Errors) Swift에서 Error는 Error Protocol을 준수하는 타입의 값으로 나타납니다. 해당 프로토콜을 채택하는 어떤 타입이든지간에..
1. Swift Concurrency의 도입 배경 iOS 13.0부터 도입된 Swift Concurrency는 비동기 프로그래밍을 보다 편리하게 할 수 있습니다. 그전에, Escaping closure를 사용해서 비동기 처리하는 방식의 문제점은 두가지였습니다. 첫번째로, 가독성이 좋지 않고, 복잡한 코드일수록 중첩된 클로저를 계속해서 작성해야 합니다. 두번째로, 중첩 클로저를 작성하며 에러코드 작성까지 완벽하게 하는 것은 힘들며 이로인해 프로그램 버그를 유발할 수 있습니다. 밑에 코드를 살펴보시죠. 해당 함수는 썸네일 이미지를 다운로드 받는 함수입니다. 이때, 이미지를 서버로부터 다운로드 받을때 escaping closure가 호출됩니다. 그리고 받은 데이터를 가지고 다시 prepareThumnail이라..
지난 포스팅글에서는 ARC의 정의, weak unowned, strong reference cycle, closure와 clousure 순환참조에 대해서 알아봤습니다. 이번 시간에는 UIkit에서 흔하게 발생할 수 있는 delayed deinitialization, memory leak에 대해서 알아보겠습니다. Escaping Closure와 Non-escaping closure 두가지 사례로 나뉩니다. Escaping Closure에서의 Memory leak Escaping Closure는 함수가 반환된 후 호출되는 클로저를 의미합니다. 해당 클로저는 함수가 실행이 완료된 이후에도 별도로 동작하기 때문에 클로저 실행이 완료되어야 메모리에서 해제가 가능합니다. 이러한 성질로 인해 메모리 leak을 유발시..
안녕하세요, 지난 시간에는 ARC의 정의, Strong Reference Cycle, weak unowned의 차이에 대해서 공부했습니다. 이번 시간에는 weak unowned의 예시로 들었었던 View Controller의 클로저 내에서 weak self를 해주는 이유를 바로 알고는 싶지만, 그 전에 closure, closure와의 순환 참조를 통해서 ARC 기초를 마무리하도록 하겠습니다! 클로저는 Reference type 클로저는 reference type이라는 걸 알고 계셨나요? 이전 포스팅에서도 말했듯, reference type의 경우 “참조”가 가능하고, reference count를 증가시키는 것 또한 가능합니다. 그렇다면, closure와 “누군가”도 서로 참조를 일으키는 “순환 참조”..