如果我有這在我的.h
文件:在Objective-C中,int變量還沒有被賦值爲零嗎?
int index;
然後在.m
文件我有:
if (index == nil)
,我還沒有分配一個值index
,是否會拿出真?
編輯
我猜nil只用於對象。那麼什麼是沒有賦值的int狀態?
如果我有這在我的.h
文件:在Objective-C中,int變量還沒有被賦值爲零嗎?
int index;
然後在.m
文件我有:
if (index == nil)
,我還沒有分配一個值index
,是否會拿出真?
編輯
我猜nil只用於對象。那麼什麼是沒有賦值的int狀態?
該變量在技術上未定義(可能有任何值),然後再爲其分配一個值。最有可能的是,它將等於零。此外,nil和NULL都被定義爲零。但是,不建議這種比較。比較指針時,您只應該使用nil(它不打算與基元一起使用)。
nil是爲Objective-C對象指針保留的特定值。它與NULL(0)非常相似,但在與消息傳遞一起使用時具有不同的語義。
像int這樣的局部原始數據類型不在Objective-C中初始化。索引的值在寫入之前不會被定義。
void foo() {
//initialize local variable
int x = 5;
}
//initialise static variable
static int var = 6;
如果它們具有靜態存儲持續時間,則它們被初始化爲0,對嗎? – 2010-06-25 01:21:45
我不認爲在C/Objective-C中初始化了任何基本類型,您應該自己初始化原始變量。 – Akusete 2010-06-25 01:23:47
具有靜態存儲持續時間的變量在C中是絕對零初始化的(C99§6.7.8.10)。 – 2010-06-25 01:25:42
對於整數,沒有「nil」這樣的事情。這是一個對象值。
注意,第一個規則上面也適用到局部對象變量。他們不會爲你初始化。 (雖然有對象類型的實例變量)
尚未分配的整數的值取決於其聲明 - 如果您沒有爲其分配任何其他值,則帶有靜態存儲持續時間的int
爲零。具有自動或分配存儲持續時間的int
可以具有任何值,如果您沒有明確地初始化它。
順便說一句,把對象聲明放在你的頭文件中會讓你後來感到痛苦。
最有可能*,但並不總是。* @Kevin有它的權利,你應該總是初始化變量。 但是,作爲對象的ivars的'int'在調用'[obj init]時被初始化爲0;' – 2010-06-25 16:55:26