분류 전체보기(26)
-
SwiftUI - 조심스러운 첫 걸음
안녕하세요 하늘선입니다~! 영어 닉네임을 뭐로 정하지 고민을 하다가, 그냥 편하게 하늘선이라고 하기로 했어요 ㅎㅎ 인삿말이 길었네요. 오늘은 긴 휴식을 끝내고 새로운 시작을 해보고자, 각종 핑계를 대며 미루고 미뤄왔던 SwiftUI에 대한 공부를 해보려고 합니다 👀 iOS 전반적인 동향을 살펴보면, 이제 슬슬 현업에서 SwiftUI가 사용되기 시작하는 추세인 것 같아요. SwiftUI가 처음 나오고 난 후에서도 많은 개선이 이루어졌는데요, 특히 iOS 14 이후와 이전에 쓸 수 있는 메서드나 문법 차이가 큰 것 같아요. 그래서 이제 나름 안정화가 되었겠다 싶어…! 공부를 좀 해보려고 합니다. 일단 이렇게 샘플 프로젝트를 만들어주고,, 이렇게 폴더와 각종 파일들이 생긴 걸 알 수 있어요. 여기서 AppDe..
2023.11.30 -
NSLock
0. 개발자 문서 확인 먼저 알아보기 전에 NSLock에 관한 설명을 애플의 개발자 문서에서 먼저 찾아보았다. https://developer.apple.com/documentation/foundation/nslock An object that coordinates the operation of multiple threads of execution within the same application. “동일한 어플리케이션 내에서 여러 스레드를 조정하는 객체” 라고 나와 있었다. 1. Thread-Safe를 지키는 방법 Re-entrancy 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드에서 함수가 호출되더라도 올바르게 주어져야함 Thread-local storage 공유 자원을 줄여 각..
2022.05.25 -
Core Animation Pipeline
Commit Transaction Layout 단계: 레이어 정렬 및 위치와 색상을 정의 (layoutSubviews를 호출) Display: draw메서드들이 접근하는 단계. 개발자들은 직접 호출을 못하며 setNeedsDisplay를 사용하여 접근해야 한다. Prepare: Core Animation이 context를 내보내려고 할 때 image decoding과 같은 작업을 진행한다. Commit: Core Animation이 layer들을 패키징하여 Render Server로 전송한다. Render Server Commit Transaction에서 받은 패키지들을 다시 분석하고 렌더링 트리로 deserialization 한다. drawing instruction을 생성하고 VSync Signal에..
2022.05.24 -
defer
Swift를 사용하면서 거의 잘 활용하진 않았지만, 꽤나 흥미롭게 다가와 이 문법을 정리하게 되었다. 0. defer란 무엇인가? 현재 스코프를 벗어날 경우 가장 마지막에 실행이 되는 구문이다. 처음 보면 이해가 잘 가지 않겠지만 예시를 이해하다 보면 생각보다 금방 이해할 수 있다. 1. defer 활용해보기 위와 같이 구성을 한 후 결과를 출력해보았다. 그랬더니 b, a, c 순서대로 출력이 되는 것을 확인 할 수 있었다. 간단하게 설명하자면 defer는 함수의 가장 마지막에 실행이 된다는 것을 보장하는 것이다. 1-1. defer 여러개 쓰기 그렇다면 defer를 여러개로 쓰게 된다면 어떻게 될까? 이렇게 defer를 여러개 쓰게 된다면 2, 1 순서로 출력된다. defer는 스택의 형식으로 사용되며..
2022.05.24 -
CADisplayLink
0. 개발자 문서 확인 iOS에서 뷰 생성과 애니메이션을 공부하던 중 CADisplayLink라는 것을 알게 되었다. 간단히 살펴본 것으로는 화면이 업데이트될 때마다 호출되는 객체라고 적혀있었다. 그래서! 이런 것은 또 못 참고 지나가기에 직접 실험을 진행해보고 싶었다. 일단 제일 먼저 확인할 애플 개발자 문서...! https://developer.apple.com/documentation/quartzcore/cadisplaylink 1. 간단 프레임률 측정 import UIKit final class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() createDisplayLink() // Do an..
2022.05.23 -
UI작업이 Main Thread에서 이뤄져야 하는 이유
iOS에서 개발을 진행하다 보면, UI 업데이트와 관련된 모든 작업은 main thread에서 작업을 해야 한다는 걸 많이 마주치게 될 것이다. 항상 이에 관한 정확한 이유를 모르고 넘겼지만 이번 기회에 이것을 한번 자세히 정리해보려 한다. 먼저 가장 많이 나타날 개념인 Thread Safe에 대해서 알아보겠다. Thread Safe란? 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 “동시에” 접근이 이루어져도 프로그램의 실행에 문제가 없음을 의미한다. UIKit은 기본적으로 Thread Safe하지 않다. UIKit과 같은 매우 큰 프레임워크에서의 모든 속성들을 Thread Safe 하게 설계하는 것은 엄청 비현실적이기에 Serial Queue에서 처리함으로써 ..
2022.05.20