본문 바로가기
WWDC

WWDC 17 - Efficient Interactions with Frameworks

by vapor3965 2021. 6. 30.

목차


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

     

     

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

    댓글