일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- World
- 개발
- Design Pattern
- SwiftUI
- 부트캠프
- IOS
- rxswift
- Algorithm
- Tistory
- 코코아 인터널스
- OS
- ios #swift #uialertcontroller #메서드 스위즐링
- WWDC
- 알고리즘
- 디자인패턴
- 부스트캠프
- 후기
- 네이버 부캠
- Cocoa Internals
- notion
- 커스텀 뷰
- development
- Hello
- Swift
- 단위 테스트
- boostcamp
- Opensource
- Today
- Total
목록Programming/iOS (20)
꿈돌이랜드
Swift Concurrency 성능 조사참고한 글!Core 수만큼 정확하게 스레드를 생성하는가?코어 수 만큼 아주 정확하게 스레드를 생성하지는 않음.필요에 따라 더 스레드를 만들어서 Priority가 High인 작업들 속에서 상대적으로 낮은 작업의 실행이 영원히 기다리지 않도록 방지한다.그 반대의 경우도 마찬가지 (먼저 실행중인 task가 low이고 오래동안 점유 중 일때, high인 task가 들어올 경우)우선순위가 다른 여러 작업이 있을 때 Suspension points에서 높은 확률로 우선순위가 높은 작업이 스레드를 할당받는다.현재 실행해야 하는 작업 중 우선순위가 가장 높은 작업이 스레드를 코어 수만큼 차지하고 있다면, 우선순위가 그보다 낮은 작업을 위해 별도 스레드가 추가된다. 따라서 스레드..

Modern SwiftUI: Identified arrays이 포스팅은 위 링크를 기반으로 작성했습니다.IdentifiedArray가 필요한 이유보통 SwiftUI에서 리스트 뷰를 구현할 때 ForEach 구문으로 리스트 데이터를 순차적으로 표시하는 케이스가 많습니다.그런 경우 보통 다음과 같이 구현하게 됩니다. struct StandupsList: View { @State var standups: [Standup] = […] var body: some View { List { ForEach(standups) { standup in StandupRow(standup: standup) } } } }그런데 보통 뷰 레이어에서 다시..
메서드 스위즐링이란?메서드 스위즐링은 런타임에 함수의 구현부를 뒤섞는 방법을 말합니다.구현 방법은 보통 다음과 같이 이뤄집니다.보통 class_getInstanceMethod 나 class_getClassMethod 와 같은 방법을 사용해서 각 메서드의 셀렉터를 가져오고각각을 method_exchangeImplementation으로 뒤바꾸어 구현을 바꾸어서 구현, appdelegate 같은 곳에서 swizzle을 한번 실행시켜줍니다.단, 각 메서드는 @objc 런타임에 노출되어야 하고, dynamic으로 마킹되어있어야 함extension에 정의된 경우는 자동으로 dynamic처리가 된 것으로 칩니다.import UIKitfileprivate var swizzleEnabled = falseextension..
https://github.com/apple/swift-nioiOS 앱 내에 로컬 프록시 서버를 구축하기 위해 방법을 찾아보던 도중, 서버 개발을 위한 SwiftNIO라는 애플의 프레임워크를 알 게 되었습니다.사용 방법을 위해 README를 읽고 번역해보았습니다. 오역이 있을 수 있습니다.Swift로 서버를 구축해보고자 하시는 분들께 도움이 되었으면 합니다. SwiftNIO는 유지 관리 가능한 고성능 프로토콜 서버 및 클라이언트의 신속한 개발을 위한 크로스 플랫폼 비동기, 이벤트 드리븐 네트워크 어플리케이션 프레임워크.Netty와 비슷하지만, Swift용으로 작성됨.개요SwiftNIO는 기본적으로 Swift에서 고성능 네트워킹 어플리케이션을 구축하기 위한 도구.특히 thread-per-connect 동시..
🎹About Core AnimationIntroduces the main components and services of Core Animation.https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004514Core Animation은 CoreGraphics 보다 더 윗단의 프레임워크.iOS 앱을 프로그래밍 한다는 것은, 알든 모르든 Core Animation을 사용하고 있다는 것.Core Animation공식 문서 정의:Core Animation은 CPU에 부담을 주거나 앱 속도를 저하..

다음 애플 문서를 참고했습니다.Object archivingA collection of short articles on the core concepts, patterns, and mechanisms in Cocoa programming.https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Archiving.html객체 아카이빙아카이빙은 객체 그래프를 응용 프로그램 간에 1)저장하거나, 2) 전송가능한 타입으로 변환하는 과정을 말합니다.아카이빙의 최종 결과인 아카이브는 객체의 ID, 캡슐화된 값, 다른 객체와의 관계가 기록된 byte stream입니다. 아카이빙의 반대인 언아카이빙은 아카이..

9.1 타입 시스템스위프트 타입 시스템은 자바스크립트나 파이썬처럼 자유로운 덕 타입 시스템이 아니라 명시적인 타입 시스템이다. 오브젝티브-C 처럼 모든 객체가 다이내믹 타입은 아니지만 프로토콜 타입을 활용해서 다이내믹하게 확장하면서도 오브젝티브-C보다 안전하게 쓸 수 있다.9.1.1 스위프트 타입스위프트에는 크게 두 종류의 타입이 있다. 이름 있는 타입(named type)과 이름 없이 합쳐진 타입(compound type)이다. 이름 있는 타입은 클래스, 구조체, 열거, 프로토콜 같은 타입의 이름이 미리 정해진 형태를 말한다. 기존 타입을 상속, 확장해서 나만의 이름을 주고 새로운 타입으로 지정할 수도 있다. 라이브러리에 포함하고 있는 배열, 사전, 옵셔널 타입도 모두 이름 있는 타입이다. 오브젝티브-..
…중략…8.2 스위프트 클로저클로저는 접근 가능한 특정 범위(scope) 내에서 사용하는 값을 (함수 내부에) 갖고 있는 함수를 의미한다. 스위프트에서 함수는 모두 클로저다. 그리고 스위프트에서 클로저는 함수이거나 이름 없는 그냥 클로저 중 하나다. 일부 스위프트 함수는 오브젝티브-C 블록 객체 형태로 호환 가능하다. 반대로 블록 객체는 스위프트에서 클로저처럼 호환성을 유지하면서 호출할 수 있다.8.2.1 클로저 형식…중략…스위프트에서 함수는 당연히 다른 함수의 인자 값으로 사용할 수 있다.…중략…참조 범위가 전체인 글로벌 함수는 이름은 있지만 캡처하는 변수가 없는 클로저가 된다. 다른 함수 내부에 선언한 중첩 함수는 감싸고 있는 함수 범위에 접근 가능한 변수들을 캡처하는 이름 있는 클로저가 된다. 마지..