美文网首页
OC中容易混淆的一些概念

OC中容易混淆的一些概念

作者: Gintok | 来源:发表于2018-03-23 18:52 被阅读12次

    NSInteger,int,NSNumber

    在苹果官方的API文档中,关于NSInteger有这样一段描述:

    When building 32-bit applications, NSInteger is a 32-bit integer.
    A 64-bit application treats NSInteger as a 64-bit integer.

    即,在32位App中,NSInteger是32位整型,在64位App中,NSInteger是64位整型.
    同时,在头文件 中,对NSInteger有以下定义:

    #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64  
    typedef long NSInteger;  
    typedef unsigned long NSUInteger;  
    #else  
    typedef int NSInteger;  
    typedef unsigned int NSUInteger;  
    #endif  
    

    由此可知:NSInteger能够自动匹配,在32位应用中,表示32位的整型,而在64位应用中,表示64位整型。

    • NSNumber
      NSNumber是对一般数据类型的封装对象,使得在一些只允许对象的场合可以使用,如字典和数组中,不能直接存放一般数据类型,只能存放加箱之后的对象。

    bool,Bool,Boolean

    三者在源码中的定义如下

    • BOOL
    typedef signed char BOOL;
    #define YES (BOOL)1
    #define NO  (BOOL)0
    
    • bool
    //C99标准定义了一个新的关键字_Bool,提供了布尔类型
    #define bool _Bool
    #define true 1  
    #define false 0
    
    • Boolean
    typedef unsigned char Boolean;
    enum DYLD_BOOL { FALSE, TRUE };
    

    总结

    bool是int型,即非0则为真;
    BOOL 是signed char型,仅为1时,为YES;
    Boolean是unsigned char型,注意其返回真值用的是枚举{ FALSE, TRUE }

    bool b1;//当b1!=0 就=YES
    BOOL b2;//当b2=1 才=YES
    

    相关文章

      网友评论

          本文标题:OC中容易混淆的一些概念

          本文链接:https://www.haomeiwen.com/subject/yinxcftx.html