【问题标题】:Objective-C : Mistake BOOL and bool?Objective-C:错误 BOOL 和 bool?
【发布时间】:2010-11-16 14:22:45
【问题描述】:

我已经发现 bool 是 C 类型,而 BOOL 是 Objective-C 类型。 bool 可以是 true 或 false,BOOL 可以是 YES 或 NO

对于初学者来说,很难区分这些类型。如果我使用 bool 而不是 BOOL,会发生什么不好的事情吗?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    BOOLsigned char,而 boolint(实际上,在使用 C99 之前的标准编译时,在 Darwin 中它是 typedef'd 一样)。从那里,可以遵循在整数类型之间提升/降级时的通常考虑。

    【讨论】:

      【解决方案2】:

      在常见情况下不太可能出现兼容性问题(将其设置为 YES/1 或 0/NO)。

      我建议您参考文档以了解其他情况下的差异: http://developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/c_ref/BOOL

      【讨论】:

        【解决方案3】:

        虽然您可能能够根据自己的需要使用 bool 而不是 BOOL,但您可能会遇到将“bool”传递给其他东西(如公共 API 方法)的问题.在编写 Objective-C 代码时,您应该简单地坚持使用 BOOL,主要是为了面向未来。

        但我认为这样做不会导致任何事情发生,只是极力不推荐,并且不遵循任何 Objective-C 的约定。

        作为旁注,BOOL 的 YES 或 NO 格式是一种建议,我有将 BOOL 设置为 TRUE 或 FALSE 的坏习惯(注意全部大写),这没问题。您也可以使用 1 或 0。

        这些都是有效的:

        BOOL myBool;
        myBool = YES;   // true
        myBool = TRUE;  // true
        myBool = 1;     // true
        myBool = NO;    // false
        myBool = FALSE; // false
        myBool = 0;     // false
        

        【讨论】:

        • 从技术上讲,myBool = 'Z' 同样有效,但使用 YES 和 NO 以外的任何内容都违反 BOOL 的语义。
        猜你喜欢
        • 2011-03-02
        • 1970-01-01
        • 2020-03-13
        • 2015-04-24
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多