2013-03-24 100 views
3

在實現了一個NSString getter或setter顯示爲爲什麼沒有布爾必須指向一個對象

-(NSString *)nameOfSomething 

然而,當你獲取或設置一個布爾你不這樣做我們一個星號來指向東西

-(BOOL)nameOfSomething 

我想知道爲什麼你必須這樣做?爲了指出還不需要星號嗎?是否有某個原因布爾不需要?

感謝

回答

4

在嘗試編程iOS之前學習C是一個好主意,因爲你將要使用Objective-C,而Objective-C是C.在普通數據類型和指針之間是有區別的。星號與指針有關。 (Objective-C的「對象」類型都是三分球,但C有其他類型。)C的需要爲iOS編程都在這裏討論

最重要的方面:

http://www.apeth.com/iOSBook/ch01.html

由於該章解釋,一個BOOL就像一個NSInteger - 它只是一個數字,而不是一個對象。

+0

I object * Objective-C是C *,** IT是C的超集** – 2013-03-24 16:03:06

+0

但是NSInteger是一個對象(實際上是A類) – 2013-03-24 16:06:37

+1

@LayGonzález不!請參閱https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html – 2013-03-24 16:09:33

0

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%@看到它的價值。

1

它是一個原始類型,就像一個int。 從理論上講,它可能是一個對象,但它是一個非常簡單的概念,幾乎沒有用處。

考慮這個類比。 (左爲原始類型,右爲類)

int : Integer (Integer from java) 
BOOL : --- 
--- : NSString 

等等。

如果您真的需要一個對象,請打包裝。

相關問題