- 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻
https://developer.apple.com/videos/play/wwdc2017/244
관련내용
- 프레임워크를 앱에 효과적으로적용시키는방법
요약
- 👍Slice는 COW으로, 비용이발생하지않는다.
- NSCoreFoundation에서 CoreFoundation으로 브릿징은 비용이들지않지만,
- Objective-> Swift 의 브릿징비용은 든다. 하지만 immutable은 최적화되며 굉장히 싸게 copy된다.
- UILabel도 NSString에서 String으로 브릿징되는것이며, 이는 immutable이여서굉장히싸다.
- 하지만, UITextView는 mutable이여서, 길이가길수록 비싸진다. 그래서 string으로 받아오지말고, mutableString으로 받아오는것이 비용이없다.
- String은 Character의구성으로되어있고, 각 Unicode기반인데, NSString에서는 UTF-16인코딩이여서 NSRange와 Range를 사용할때 다를 수밖에없기때문에, NSRange를하기위해서는 NSString으로 브릿징해야한다.

Foudnation의 개선
- NSCalendar 개선.
- Operstaion, OperaitonQueue 개선
- COW 구현
COW란? - Copy on Write
- 변형이일어나기 전까지 복사를 하지않고, 같은 값을 가리킴으로써 성능을개선한것.
- 변형이일어나면 새로복사하는데, 이는 safe하다.

👍slice는 비용을 발생하지않는다.
- Array Slice 뿐만아니라, Data 타입에도 적용된다.

Bridging비용
- 참조타입에서 값타입으로의 bridging은 약간의 비용이발생하지만, 최적화가되므로 큰 비용은아니다. 만약 subclass되거나,proxy, mutable data이면 copy 비용이좀 발생한다.?

String
UIKit - label text를 가져올때, 어떤일이발생하는가?
- UILabel의 text를 가져오는데, UILabel은 Objectvie-C로 구현되어있고, 즉, NSString을 브릿징하여 가져오는형태가된다.

NSString은 class, 참조타입이고 swift의 string은 값타입이다.
하지만, NSString는 immutable이여서, 최적화가이루어지면서 굉장히 싸게 copy되어진다.

하지만, TextView에서는…
마찬가지로 NSString에서 브릿징되어지면서 copy되는데,
NStextStorage는 MutableAttributed 이여서, ( NSString이 mutable이여서 ) 비싸게 copy되어진다.

👍그러므로, mutableString을 사용하는것이좋다.
mutablestring은 같은 타입이기때문에 브릿징이없고, 그렇기때문에 copy하지않으므로 비용이발생하지않는다.

1KB정도면 자주호출해도 큰 문제가되지않는다.

하지만 1MB이라면? mutableStirng을 고려하는것이좋다.
1GB이라면?!! 무조건 mutableString을하셈!

String - NSRagne & Range
하나의 Character는 다음과같이 구성되어있다.
swift- String이에는 5개로구성되지만,
NSString인경우에는 utf-16으로 7개가구성된다.
- 그러므로, 이러한경우에, NSRange와 Range는 다를수밖에없고, 까다로워진다.

그러므로 background컬러를 변경하기위해서는
NSString으로 브릿징하고, nsrange를 찾고, mutableAttritubted를 추가하고,….복잡하다.

👍대신! NSRange를 바로 Range로 이니셜라이즈할수있도록 swift 4에서만들었다! ( 박수 박수 )

또는 이렇게 여러개로 지정할수있다.

Text Layout lendering
- Text는 정말 어렵다!
- 우리가 흔히 접하고 하기때문에 이는 굉장히 쉬워보이는 인식을 준다.
- 하나의 Text는 수십개가넘는 다양한 요인을 고려하여 lendering되어진다.
- 그러므로, standard 한 label control을 사용하기를바란다.

'WWDC' 카테고리의 다른 글
WWDC 19 - Making Apps with Core Data (0) | 2021.07.02 |
---|---|
WWDC 18 - Core Data Best Practices (0) | 2021.07.02 |
WWDC 18 - Behind the Scenes of the Xcode Build Process (0) | 2021.06.27 |
WWDC 15 - Optimizing Swift Performance (0) | 2021.06.27 |
WWDC 13 - What’s new with Multitasking (0) | 2021.06.27 |