일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- error
- Notification
- UIButton
- Git
- appstore
- MacOS
- 이미지
- 한글
- iOS16
- mac
- Archive
- window
- darkmode
- Swift
- rxswift
- geofencing
- Apple
- 개발자
- JPA
- github
- SwiftUI
- Realm
- Code
- 웹뷰
- IOS
- FLUTTER
- view
- Session
- Firebase
- Xcode
- Today
- Total
목록분류 전체보기 (269)
EEYatHo 앱 깎는 이야기
lazy 단어 뜻 그대로 게으른 변수, 실제로 사용되기 전까지, 메모리에 적재되지 않는다. 생성하는데 비교적 큰 비용이 들고, 잘 사용되지 않는 저장프로퍼티를 선언할 때 사용. 불필요한 메모리 사용을 줄일 수 있다. 초기화시 빈 값을 가지고, 이후 사용될 때 실제 값으로 변경되기 때문에, let 이 아닌 var 만 사용할 수 있다. lazy 저장 프로퍼티는, 같은 스코프 안에 있는 저장 프로퍼티를 사용하여 초기화 할 수 있다. class SomeClass { var storedProperty = "adsadas" lazy var lazyProperty: String = { // ok return storedProperty }() var property: String = { // error return s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/x4eAB/btrZauuXN1T/1zjvkK7yqnji3yyajvQ99K/img.png)
RxSwift 의 Scheduling RxSwift 에서 제공하는 스케쥴러(쓰레드) 관리 API 는 2가지 subscribe(on: Scheduler) subscribeOn is deprecated and renamed observe(on: Scheduler) observeOn is deprecated and renamed subscribe(on:) operator chain 의 어디에서 호출하든 모든 closure 의 Scheduler 설정. 여러개를 호출할 경우, 맨 처음(맨 위)의 subscribe(on:) 만 적용됨. subscribe(on:)이 없으면, create {} 는 관찰하는 곳(subscribe()이 호출된 곳)에서 호출된다. 여기서 정해진 Scheduler는, observe(on:)이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/boY1Im/btrY8jfTntA/Nzt1yZk4eJZcqniTpPY4k0/img.png)
Frame Super View 의 좌표계에서, 자신의 위치와 크기 View 회전시, 회전한 뷰를 감싸는 새로운 Rect 로 표시 // testView 회전 전 // frame = (50.0, 70.0, 150.0, 100.0) let pie = 3.141592 testView.transform = .init(rotationAngle: pie / 4) // 2pie 가 1바퀴 // 45도 회전 // frame = (36.6, 61.6, 176.8, 176.8) Bounds 자신의 좌표계에서, viewport (내 subview들을 보여주는 영역) 의 위치와 크기 기본값 : origin은 (0,0), size는 자신의 size 그대로 View 회전시, 그대로 유지됨 bounds 조정시, subview 들이 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beMF8C/btrX8iXDTXg/1dEUv8WCHsFtKCKYEXZ6iK/img.png)
if let 약식 구문 등장 let foo: String? = "hello world" // if let foo = foo { if let foo { print(foo) } any 확장 any 키워드를 사용한 모듈을 만들 때, type erase 로 type relationship 이 제거되어 associatedType 을 디스패치하지 못하던 상황을 개선 => any 타입을 unboxing 하여 some 타입으로 컨버팅 할 수 있는 기능을 컴파일러에 추가 func feed(_ animal: some Animal) { let food = type(of: animal).Feed.make() // associatedType 접근 animal.eat(food) } func feedAll(_ animals: [a..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vtYWf/btrWeXujtL7/zNUVxS9ZRQU7HexxfuHCG0/img.png)
async/await Thread 와 GCD 이후, Swift 5.5 에서 나온 최신식 동시성 지원 API 정확히는 키워드(async)와 피연산자(await) 코루틴 모델을 도입 ( 실행을 일시정지 할 수 있는 함수 ) async/await-propasal 링크 탄생 배경 들여쓰기가 가득한 콜백 지옥의 비동기 코드들이 존재할 수 있음 특히나, 분기를 거처서 한쪽에만 비동기 코드가 필요한 경우, 더더욱 들여쓰기와 콜백 지옥이 발생하기 쉬움 콜백은 오류 처리와 함께 사용할 때, 구현부를 장황하게 만듬 콜백 호출이나 return문을 까먹는 경우도 자주 발생 func processImageData(completionBlock: (_ result: Image?, _ error: Error?) -> Void) { ..
WWDC 매년 6월 경 애플에서 개최 https://developer.apple.com/wwdc22/ https://namu.wiki/w/WWDC 레츠 스위프트 Let's Swift https://letswift.kr/2022/ 2022.11.30 참가신청 11.16 ( 트위터 11.11 에 글 올라왔었음 ) https://twitter.com/letswiftkr 그전에는 온라인으로 진행했었음 https://festa.io/hosts/70 네이버 DEVIEW 2019.10.28 ~ 29 ( 참가신청 10.10 ~ 11 ) 2020.11.25 ~ 27 ( 참가신청 11.10 ) 2021.??.?? ( 참가신청 11.10 ) 2023.02.27 ~ 28 https://d2.naver.com/home 여기에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bRcKEw/btrV4uDFsLe/LxRWlH4QXC9RsJTB9IAwk0/img.png)
Concurrency CPU 칩은 발달을 거듭해 열과 같은 물리적 법칙 한계로 코어당 성능을 더이상 끌어올리기 힘들어졌고, 칩이 가지고 있는 코어를 늘리는 방향으로 발전하고 있다. 코어의 갯수는 계속해서 늘어날 것으로 예상된다. 이에 소프트웨어 개발자는 멀티코어(동시성) 프로그래밍을 어떻게 잘 할 수 있을지 고민해야한다. 애플 문서 링크 iPhone 14 CPU 코어 6개 Thread 개발자가 여분의 코어를 제어하는 전통적인 방법은 Thread(쓰레드)를 사용하는 것이다. 쓰레드를 생성하고 해제하면서 여분의 코어를 이용해 병렬적으로 Task를 처리한다. 스케쥴링은 CPU가 알아서 해준다. let thread = Thread { print("My Awesome Thread") } thread.start()..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/de5BBr/btrVtF1wWmj/0NUQ8WKWKMVSuSCzUwAKZ1/img.png)
성능 비교의 3가지 관점 Allocation: 인스턴스를 생성하면 Stack과 Heap 중 어느 곳에 할당 되는 지 Reference Counting: 인스턴스를 통해 레퍼런스 카운트가 몇개가 발생하는지 Method Dispatch: 인스턴스에서 메소드를 호출했을 때, 메소드 디스패치가 정적인지 동적인지 Allocation Stack 은 LIFO 구조 및 Pointer 를 이용해서 할당, 해제하기에 간단한 만큼, O(1)의 빠른 속도를 가짐 Heap 은 사용하지 않은 블럭을 찾아서 할당하고, 해제한 블럭을 적절한 곳에 재삽입해야하고, thread-safe 를 위해 locking 또는 기타 동기화 기법을 사용해 무결성을 보호해야하기에, Stack 보다 느린 속도를 가짐 Stack 은 Value-Sement..