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 | 31 |
Tags
- MVVM
- tableView
- Observable
- collectionview
- 리펙터링
- Refactoring
- UICollectionView
- 클린 코드
- uitableview
- 애니메이션
- rxswift
- 스위프트
- HIG
- swiftUI
- RxCocoa
- ribs
- clean architecture
- uiscrollview
- Clean Code
- 리펙토링
- combine
- Protocol
- Xcode
- swift documentation
- map
- 리팩토링
- SWIFT
- ios
- UITextView
- Human interface guide
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 1. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화) 본문
iOS 응용 (swift)
[iOS - swift] 1. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화)
jake-kim 2024. 5. 13. 01:381. noncopyable, ~Copyable - 개념 (Swift 5.9+, owner, ownership, 최적화)
2. noncopyable, ~Copyable - 연산자 (borrowing, inout, consuming)
noncopyable, ~Copyable 이란?
- Swift5.9에서 탄생
struct SomeStruct: ~Copyable {
var name: String
}
enum SomeEnum: ~Copyable {
case a
}
- swift5.9 이전 swift 모든 타입들은 모두 copyable 타입
- noncopyable은 swift5.9에서 enum과 struct에 적용 가능하도록 등장
- noncopyable은 swift5.9에서 enum과 struct에 적용 가능하도록 등장
- class 타입은 deinit이 있어서 이 deinit을 활용할 수 있지만, struct와 enum은 존재하지 않음
- 이렇게 deinit되는 타이밍을 알 수 있는 unique resources 관리할 때 struct와 enum을 사용하는 니즈를 위해 ~Copyable이 탄생
- unique resources 관리 포인트에서의 class와 struct 비교
- class를 unique resources로 사용할 땐 개체의 참조만 복사되기 때문에 단 하나의 리소스를 위해서 heap영역에 계속 올려놓는것보다 stack 영역에 ~Copyable로 메모리를 관리하는 것이 더욱 효율적
- ~Copyable을 사용하여 struct, enum을 정의하면 `unique ownership`을 갖는다고 표현
ex) file descriptor와 같은 기능을 만들 때 struct로 선언하고 ~Copyable을 사용하여 deinit시점도 관리하는 코드
struct FileDescriptor: ~Copyable {
private var fd: Int32
init(fd: Int32) { self.fd = fd }
func write(buffer: Data) {
buffer.withUnsafeBytes {
write(fd, $0.baseAddress!, $0.count)
}
}
deinit {
close(fd)
}
}
* 이 ~Copyable을 함수와 같은 곳에서 주고받을때, 연산자를 사용하지 않으면 컴파일 에러가 발생하는데, 이 내용은 다음 포스팅 글에서 계속..
* 참고
- https://github.com/apple/swift-evolution/blob/main/proposals/0390-noncopyable-structs-and-enums.md
'iOS 응용 (swift)' 카테고리의 다른 글
Comments