ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NSHipster - iOS] NS_ENUM, NS_OPTIONS 알아보자
    앱등이에게 살충제를 뿌린다./iOS 2015. 12. 2. 00:52

    <썸네일 때문에 올리는 사진>




    기존의 enum과 typedef

    typedef와 enum을 사용하여 사용자 정의 타입을 손쉽고 알아보기 편하게 지정할 수 있습니다.



    애플은 이전까지 모든 enum타입에 대해서 아래와 같이 사용해왔습니다.

    UITableViewCellStyle이란 타입이 고정된 크기(4개)를 가지고 있지만 앞에서 언급된 enum과 새로운 타입에 대한 관계를 컴파일러가 알지는 못합니다.

    그래서 애플은 NS_ENUM을 통해 "One Macro To Rule Them All"이란 방식을 도입하게 됩니다.



    NS_ENUM

    위에 선언한 UITableViewCellStyle은 아래와 같이 선언할 수 있습니다.

     
     NS_ENUM의 첫 번째 파라미터에는 저장할 새로운 자료형의 타입을 입력해줍니다. 64bit 환경체제에서는 UITableViewCellStyle이 8바이트의 값을 갖겠네요. 두 번째 파라미터에는 새로운 타입의 이름을 지정해줍니다. 블럭 내부에는 평소처럼 값을 지정해주시면 됩니다. 이 방법은 앞서 설명드린 enum방식들의 장점만을 취하고 있습니다. 그리고 컴파일러에게 완벽한 switch문과 타입체크에 대한 힌트를 제공합니다.



    NS_OPTIONS

    enum은 bitmask를 정의할때도 사용합니다. 이진수의 특징을 사용하면 or(|)연산자 또는 and(&)연산자를 사용하여 하나의 변수에 여러가지 정보를 담고 사용할 수 있습니다. 여러가지 정보들을 차례대로 1<<0, 1<<1, 1<<2 이런식으로 만들어서 사용하죠. 


    10110(22)라는 2진수를 떠올려봅시다. 이 수에 있는 각각의 비트는 하나의 boolean값을 나타낼 수 있습니다. 


    예를 들어 UIViewAutoResizing는 뷰의 flexibleTopMargin, flexibleBottomMargin, flexibleLeftMargin, flexibleRightMargin 또는 flexibleWidth,  flexibleHeight값을 포함할 수 있는 bitmask입니다.이 bitmask를 사용할 때에는 NS_ENUM보다 NS_OPTIONS가 더 적절합니다. 사용법은 NS_ENUM과 완전히 똑같습니다. 이 매크로를 사용할 때에는 조심해서 값들을 열거하시길 바랍니다.





    출처 : http://nshipster.com/ns_enum-ns_options/

Designed by Tistory.