iOS 프레임워크(6)
-
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 -
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 -
CGRect, CGSize, CGPoint에 대하여
최근 UI의 작동방식에 관심이 많아져 다시 기초부터 공부하게 되었습니다. PinLayout과 FlexLayout 같은 외부 서드파티 라이브러리를 활용한 UI에 관심을 가지고 찾아보고 있었는데, 확실히 기존에 사용하던 오토 레이아웃과는 다른 개념이었어요... 이것도 기회가 된다면 나중에 한번 정리를 해보도록 할게요! 로딩 속도가 어마 무시하게 빠른 녀석들입니다 후들후들... https://github.com/layoutBox/PinLayout GitHub - layoutBox/PinLayout: Fast Swift Views layouting without auto layout. No magic, pure code, full control and blazing fast Fast Swift Views lay..
2022.04.28