为 NSString 实现 getter 或 setter 时,它显示为
-(NSString *)nameOfSomething
但是,当您获取或设置布尔值时,您不会使用星号来指向某些东西
-(BOOL)nameOfSomething
我想知道为什么你必须这样做?不应该仍然需要星号来指向吗?布尔值不需要一个是否有某种原因?
谢谢
为 NSString 实现 getter 或 setter 时,它显示为
-(NSString *)nameOfSomething
但是,当您获取或设置布尔值时,您不会使用星号来指向某些东西
-(BOOL)nameOfSomething
我想知道为什么你必须这样做?不应该仍然需要星号来指向吗?布尔值不需要一个是否有某种原因?
谢谢
在尝试编写 iOS 之前学习 C 是个好主意,因为您将使用 Objective-C,而 Objective-C 是 C。纯数据类型和指针之间存在差异。星号与指针有关。(Objective-C 的“对象”类型都是指针,但 C 有其他类型。)
这里讨论了 iOS 编程所需的 C 语言最重要的方面:
http://www.aeth.com/iOSBook/ch01.html
正如该章所解释的, BOOL 就像一个 NSInteger - 它只是一个数字,而不是一个对象。
它是一种原始类型,就像 int 一样。理论上,它可以是一个对象,但它是一个非常简单的概念,几乎没有用。
考虑这个类比。(左边是原始类型,右边是类)
int : Integer (Integer from java)
BOOL : ---
--- : NSString
等等。
如果您真的需要一个对象,请制作一个包装器。
BOOL
只是signed char
,你不要拿它的地址/参考。
您直接分配给它。
如果你看到它的定义是:
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#if __has_feature(objc_bool)
#define YES __objc_yes
#define NO __objc_no
#else
#define YES ((BOOL)1)
#define NO ((BOOL)0)
#endif
你用%d
not来查看它的价值%@
。