▶︎ Delegate 기본적으로 특정 protocol을 상속받아 protocol 내에 함수들을 override하여 사용한다. 수신자 Receiver 위임자(대리자) Delegate 위임자에게 수신자 자신을 전달 ▶︎ 수신자는 위임자에게 self로 자기 자신을 넘겨주
App의 생명 주기는 App의 실행/종료 및 App이 Foreground/Background 상태에 있을 때, 시스템이 발생시키는 event에 의해 App의 상태가 전환되는 일련의 과정을 뜻합니다.App의 현재 상태에 따라 할 수 있는 것과 할 수 없는 것이 결정됩니다
구조체와 클래스는 프로그래머가 용도에 맞게 코드블럭을 만들 때 용이합니다.구조체와 클래스는 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가질 수 있습니다. 새로운 사용자정의 데이터 타입을 만들어 주는 것입니다. 프로퍼티와 메서드를 사용해서 구조화된 데이터와 기
만약 Optional(?) 키워드를 사용하지 않았다면 값을 입력하라는 에러가 발생하고, 그 이후에라도 nil을 넣으려하면 컴파일에러가 발생합니다. Swift가 기본적으로 non-optional 입니다. nil에 대한 컴파일 에러를 통해 개발자는 nil에 대해 명확한
View 계층관리모든 ViewController마다 RootView를 가지며, 화면에 표시하기 위해서는 해당 RootView 계층에 속해야함MVC(Model-View-Controller)자신이 관리하는 View와 Data의 중계 역할(통제) ViewControl
Core Animation은 시각적 요소(visual elements)를 렌더링, 합성하고 애니메이션하는 인프라입니다. (Core Animation은 드로잉 시스템 그 자체가 아님에 주의. Core Animation이 직접 애니메이션을 조작하는게 아니라 실제 드로잉
operation의 실행을 관리하는 큐준비 상태, 상호 운용 종속성, 우선 순위 등을 기반으로 실행한다.우선 순위가 같을 경우 먼저 큐에 들어 온 순서대로 처리큐에 한번 들어가면 작업이 완료되었다고 보고 할 때까지 대기열에 남아 있음NSOperation의 finishe
"분산처리시킨 작업을 다른 한 개의 쓰레드에서 처리하는 큐""분산처리시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 큐"Synchronous 함수는 작업이 다 끝난 다음에만 현재의 queue에게 컨트롤을 넘깁니다. 그 전까지 현재의 queue 는 block 되어 작업이
UserDefaults는 앱 시작시 key-value 쌍을 영구적으로 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스 입니다.런타임에 UserDefaults Object를 사용하여 default DB로부터 앱의 default value를 읽습니다. UserDefa
"어떻게 나눌 것인가" 에 대한 해답으로 MVC, MVVM, MVP, VIPER등 많은 아키텍처 디자인 패턴이 있습니다. 이러한 패턴들을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있
UIKit이 Thread Safe하지 않는 이유에서부터 시작합니다. UIKit과 같이 매우 큰 프레임워크의 모든 속성을 Thread Safe하게 설계하는 것은 비현실적입니다. Serial Queue에서 처리함으로써 Thread Safe하지 않음으로 발생되는 문제를 간단
Memory Leak > - Retain cycle? : 메모리가 해제되지 않고 유지되어 누수가 발생하는 현상입니다. > - App의 Memory Leak을 캐치하는 좋은 접근 방법은, 앱의 특정 flow를 여러번 반복하면서 메모리 그래프 디버거를 이용해 메모리 스냅샷
Animate Closure 기반 애니메이션이 동작하는 동안 User Interaction이 일시적으로 Disable됨 allowUserInteraction 속성을 통해 UserInteraction을 활성화 시킬 수 있음 사용이 간단함
RunLoop는 앱 구동간에 생성되는 Thread와 함께 생성되어 해당 Thread가 수행해야 할 이벤트들을 핸들링하여 적절한 수행을 요청하고, 이벤트 처리가 종료되면 대기 상태로 접어들어 다음 이벤트에 대한 모니터링을 해주는 추상화입니다.iOS에서 이벤트 소스에서 이
AutoLayout은 뷰에 적용된 제약 조건에 따라 뷰 계층 구조에 있는 모든 뷰의 크기와 위치를 동적으로 계산합니다.이러한 제약 기반 접근 방식을 사용하면 내부 및 외부 변경에 동적으로 응답하는 사용자 인터페이스를 구축 할 수 있습니다.Item1의 항목 = Item2
UIKit은 implicit animation을 비활성화 합니다. 좀더 구체적으로 설명하자면 UIView에 있는 CALayer는 implicit animate 되지 않습니다. 사용자가 직접 생성하고 UIView에 연관되지 않은 CALayer는 implicit anima
Raywenderlich의 UICollectionViewDiffableDataSource부분을 번역한 것입니다.iOS 13 이전에는 UICollectionView는 UICollectionViewDataSource를 채택하여 데이터 소스를 구성했습니다. 이 프로토콜은 C
한 객체가 다른 객체와 상호작용(참조)하고 있다면 그 객체는 다른 객체에 의존성을 가집니다.위 코드에서 Bclass는 Aclass 객체에 의존합니다.Aclass 객체가 수정되면 Bclass도 같이 변경되게 됩니다. 즉, 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경되
SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)▶︎ 하나의 클래스에는 하나의 책임만 져야 한다.▶︎ 책임이 많으면 코드끼리 결합도를 높일 가능성이 높다. 따라서 다양한 사유로
View, Interactor, Presenter, Entity, Router로 이루어져 있는 패턴입니다.View와 ViewController 파일들입니다.Presenter의 요청대로 디스플레이 하고, 사용자 입력은 Presenter로 보냅니다.Business logi
C의 libdispatch의 애플 버젼clousure 단위로 task를 queue에 넣는 것이 목적가용한 자원에 따라 병렬로 실행 할 수 있다.Sync는 실행되고 있는 작업이 끝날 때까지 앱이 대기하고 현재 런루프를 차단합니다.Async는 작업을 실행한 즉시 앱으로 돌
Thread는 thread of execution을 나타내는 말로, 실행중인 process가 시스템의 리소스 간에 작업을 분할하는 방식입니다. 디바이스 cpu의 코어 갯수만큼 한번에 여러 스레드를 실행할 수 있습니다.Multiple thread의 장점Faster exe
DispatchQueue들을 그룹으로 묶어서, 후행 클로저 (일이 끝난다음의 처리)를 할 수 있도록 합니다.어떠한 task가 있고, group의 일부로써 task를 추적하려고 한다면, group을 dispatch queue의 async 메서드의 인수로 제공할 수 있습니
(앱 자체도 포함해서) 같은 process 내에 thread들은 동일한 주소공간을 공유합니다. 즉, 각각의 thread가 동시에 같은 공유 resource를 읽고 쓰려고 합니다. 주의하지않으면 여러 thread가 동시에 동일한 변수에 쓰려고 하는 경합조건(Race Co
Operation은 GCD와 비슷하게 동작합니다. GCD와 Operation 둘다 코드 덩어리를 분리된 thread에서 동작할수 있게 합니다. 그러나 Operation은 제출된 task를 훨씬 잘 제어할 수 있습니다. 앞에서 말했듯이 operation은 GCD를 기반으
필수 구성요소 operation이 끝나기 전에 종속 operation이 시작되지 않는 것을 보장합니다.첫번째 operation에서 두번째 operation으로 데이터를 자동으로 전달하는 깔끔한 방법을 제공합니다.operation간의 종속성을 활성화하는 것이 GCD보다
Swift Types Swift의 Type은 Named, Compound type와 Reference, Value type을 기준으로 나눌 수 있습니다. Named vs Compound Named Type: class, struct, enum Compound Type
https://github.com/Juanpe/SkeletonView 를 사용하여 스켈레톤뷰를 구현합니다.
LineBreak 일반적으로 UILabel의 LineBreak는 아래의 캡쳐처럼 여러가지가 존재합니다. 각각의 속성을 간단하게 설명해 보자면 Character Wrap 개별 문자 하나 하나 단위로 줄바꿈합니다. 하나의 단어가 끝나지 않아도 줄을 바꿉니다. Word
친한 후배 덕분에 블루투스 기기와 연동하여 데이터를 표시하는 프로젝트를 진행했었습니다. 학습했던 것을 간단하게 정리해보려고 합니다. Core Bluetooth 프레임 워크는 BLE(Bluetooth Low Energy)와 BR/EDR 무선 통신
최근에 조금 시간이 나서 이전부터 개선 하고 싶었던 Toast 다시 개발하게 되었습니다.개선하고 싶었던 것은 view가 아닌 window에 띄워 다른 UI나 작업들에 영향을 받지 않고 최상단에 띄우기.Queue를 사용해서 여러개의 Toast를 순차적으로 띄우기입니다.