Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tableView
- swiftUI
- swift documentation
- map
- 애니메이션
- 리팩토링
- Observable
- Xcode
- HIG
- Human interface guide
- 리펙토링
- ios
- Clean Code
- collectionview
- RxCocoa
- ribs
- uitableview
- UITextView
- MVVM
- clean architecture
- Refactoring
- 클린 코드
- uiscrollview
- UICollectionView
- 스위프트
- combine
- SWIFT
- rxswift
- 리펙터링
- Protocol
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] __consuming 키워드 (#move-only types, #move function, #메모리 관리, #최적화) 본문
iOS 응용 (swift)
[iOS - swift] __consuming 키워드 (#move-only types, #move function, #메모리 관리, #최적화)
jake-kim 2023. 8. 22. 01:10사전지식) move-only types
- move-only types에 관한 개념은 이전 포스팅 글인 "consume" 연산자 참고
- move-only types는 소유권을 이전하여, copy by value, copy by reference가 아닌 방법으로 성능을 최적화하는것
__consuming 키워드
- 애플이 구현한 core 레포 중 Sequence를 보면 중간에 __consuming 키워드가 등장하는데, 이는 이 함수의 성능을 최적화하기위해 존재
- __consuming은 단어 그대로 해당 키워드가 붙으면 이 함수를 호출하는 인스턴스를 소비한다는 의미이며, 위처럼 _copyToContiguousArray()를 호출하면 해당 인스턴스의 소유권은 반환되는 새로운 인스턴스에 이전된다는 의미
- (성능 최적화를 위해서 사용)
ex) consuming 키워드를 이해할 수 있는 예제
- Foo라는 구조체가 있을 때, bar() 함수를 호출하면 이 함수를 호출한 인스턴스의 소유권이 bar 함수로 이전 (최적화)
- 이 함수를 호출한 인스턴스는 소유권을 잃어버려서 사용할 수 없는 형태
(실제로 compiler error는 발생하지 않지만 내부적으로 컴파일러가 최적화할때의 현상)
// 코드: https://stackoverflow.com/questions/51292799/what-does-consuming-do-in-swift
// Foo is a move-only type, it cannot be copied.
moveonly struct Foo {
consuming func bar() { // Method is marked consuming, therefore `self` is moved into it.
print(self) // We now 'own' `self`, and it will be deinitialised at the end of the call.
}
}
let f = Foo()
f.bar() // `bar` is a `consuming` method, so `f` is moved from the caller to the callee.
print(f) // Invalid, because we no longer own `f`.
* 참고
https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md
https://stackoverflow.com/questions/51292799/what-does-consuming-do-in-swift
https://github.com/apple/swift/blob/main/stdlib/public/core/Sequence.swift#L391
'iOS 응용 (swift)' 카테고리의 다른 글
Comments