일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- tableView
- MVVM
- Observable
- ios
- clean architecture
- 클린 코드
- HIG
- Human interface guide
- Xcode
- swift documentation
- UICollectionView
- SWIFT
- UITextView
- 스위프트
- uitableview
- Protocol
- 리펙토링
- Refactoring
- swiftUI
- rxswift
- map
- combine
- RxCocoa
- collectionview
- uiscrollview
- 애니메이션
- Clean Code
- 리팩토링
- ribs
- 리펙터링
- Today
- Total
목록성능 최적화 (4)
김종권의 iOS 앱 개발 알아가기
@inlinable 키워드 함수를 호출할 때, 호출하는 오버헤드를 줄이기 위해서 호출하는것이 아닌 이 키워드가 사용된 곳에 함수의 구현부를 그대로 복사해와서 오버헤드를 줄이는 기법 ex) 애플의 AttributedString 구현부에서 @inlinable 사용 예시 @available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *) extension UnsafeMutableBufferPointer : ContiguousBytes where Element == UInt8 { @inlinable public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R { return tr..
사전지식) move-only types move-only types에 관한 개념은 이전 포스팅 글인 "consume" 연산자 참고 move-only types는 소유권을 이전하여, copy by value, copy by reference가 아닌 방법으로 성능을 최적화하는것 __consuming 키워드 애플이 구현한 core 레포 중 Sequence를 보면 중간에 __consuming 키워드가 등장하는데, 이는 이 함수의 성능을 최적화하기위해 존재 __consuming은 단어 그대로 해당 키워드가 붙으면 이 함수를 호출하는 인스턴스를 소비한다는 의미이며, 위처럼 _copyToContiguousArray()를 호출하면 해당 인스턴스의 소유권은 반환되는 새로운 인스턴스에 이전된다는 의미 (성능 최적화를 위해..
Move-only Types 개념 효율적으로 값을 인자에 넘겨서 메모리 관리 및 성능 상의 최적화를 하는 방법 (Swift5.9에서 이와 연관된 consume 연산자 탄생) 값을 복사하거나 참조를 넘기는 형태가 아닌, 값의 소유권을 이전한다고 표현 기존에는 특정 과업을 위해서 값을 업데이트 하고 사용한 후 초기화 해주는데, 이 방법은 메모리 관리상 비효율적인 방법 보통 3가지 방법이 존재 1) 배열에 직접 추가 var x = [Int]() x.append(5) x.use() x = [] 2) 함수의 인수에 값을 넘겨서 새로운 값을 업데이트하고난 후 반환된 값으로 다시 변경 x = appendFive(x) x.use() x = [] 3) 함수에 reference를 넘겨서 inout 인수 업데이트 처리 //..
final class vs class final class A { ... } class B { ... } class A와 class B의 차이점 A는 서브클래싱이 불가능 A는 성능적으로 더욱 높은 장점 -> 성능이 좋은 이유? 성능이 좋은 이유 - static dispatch 사용 (아래에서 이어서 개념 설명) Static Dispatch (Direct Call) 변수를 타입에 맞춰서 메소드와 프로퍼티를 참조 참조될 요소를 컴파일 타임에 결정 상속 가능성이 없다는 keyword를 코드에 표출하면 컴파일러는 Static Dispatch를 사용 Dynamic Dispatch (Indirect Call) override, subclass와 같은 변수의 실제 타입의 맞춰서 메소드와 프로퍼티를 호출 대표적으로 객..