2017-05-25 32 views
1

通過從Apple官方過渡到ARC文檔,它說「堆棧變量」現在被初始化爲零值。然而在我的快速非正式測試中,靜態變量和ivars似乎也初始化爲零;有些人表示相信他們絕對會自動歸零。然而靜態變量和ivars不是堆棧變量。蘋果是否發佈了關於靜態變量和ivars的不同法令?ARC下的Objective-C是否保證將靜態和ivars初始化爲零?

也有一個函數中的靜態初始化和函數外部的靜態之間的區別?

回答

2

static由於語言的語義,變量被清零 - 作爲C的嚴格超集,行爲是有保證的。 ivars are also guaranteed to be zeroed out upon initialization(參見第3項)。

+1

加上*由於Objective-C語言*的語義,ivars總是被初始化爲零。在ARC存在之前,這已經很久了,IIRC。 – bbum

+0

那Swift爲什麼要賣給我們,因爲它具有重要特性,它要求所有變量都用一個值進行初始化?僅僅因爲零有時不是一個理想的價值? – asdfkjaasdflf

+1

@ Q453 - 語言在使用之前是否需要明確的初始化/賦值(如Swift中)或支持默認初始值(如Objective-C中)是一個哲學/宗教辯論,雙方都有爭論 - 這裏不會介紹!但是對於一種語言實現對這場辯論的有趣貢獻[見這裏](https://en.wikipedia.org/wiki/ALGOL_68-R#F00L) – CRD