...
본문 바로가기

WWDC

WWDC 17 - Efficient Interactions with Frameworks


  • 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻

 

 

https://developer.apple.com/videos/play/wwdc2017/244

 

Efficient Interactions with Frameworks - WWDC17 - Videos - Apple Developer

Border crossings can be smooth and efficient or slow and tedious. The boundary between an app and a framework is analogous, but...

developer.apple.com

 


관련내용

  • 프레임워크를 앱에 효과적으로적용시키는방법

요약

  • 👍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을 사용하기를바란다.