2010-07-12 69 views
4

目標C中的BOOL值始終爲NO(默認情況下)。但是最近我遇到了BOOL變量的值返回YES的情況(默認情況下)。有人可以向我解釋這一點嗎?目標C中Bool的值

回答

22

BOOL沒有任何價值,因爲它是一種類型。

您可能是指BOOL類型的變量。有不同類型的變量,它有不同的初始化語義:

  1. 實例變量:Objective-C的alloc承諾,所有實例變量設置爲零,這在BOOL的情況下,意味着NO;
  2. 全局變量:或者更確切地說,靜態存儲持續時間的變量被初始化爲零,如C標準中所定義的。
  3. 局部變量未初始化。如果您未指定值,則其內容未指定。這也是來自C標準,可能是你偶然發現的。
+0

#3是我要發佈的內容! – Wevah 2010-07-12 11:08:53

+0

這是否意味着int a在Objective C中總是不會賦值0? – mindfreak 2010-07-12 11:12:29

+0

@Mindfreak:正好。所有本地(函數作用域)變量都必須被初始化。 – 2010-07-12 11:22:35

1

如果你聲明一個沒有初始化的變量,操作系統將隨機分配內存,並在該瞬間分配的內存可能包含一些垃圾值。那個垃圾可以表示No也可以是Yes值。

建議:始終使用正確的初始化聲明變量以避免代碼中的錯誤。