2016-07-06 44 views
1

我剛剛花了3個小時來調試一個錯誤,並最終縮小了(我認爲)變量名稱。'init'被禁止作爲變量名的* part *嗎?

我正在使用initMonths(最初幾個月),這導致了不可預知的錯誤,但是當我更改爲iMonths時,它工作正常!

我可以理解,防止使用它自己的init,但會驚訝,如果它被阻止只是作爲變量名的一部分。這是一個錯誤還是一個功能?

+1

'let initMonths = 123; print(initMonths * 10)'對我來說工作正常...... –

+0

@TimVermeulen它似乎越過了編譯器,但在應用程序中導致不可預知的行爲。我使用initMonths作爲對象屬性,當我使用這些對象來填充UITableViewCells時,它會掉落在第40行左右(儘管不一致) – Derek

回答

1

這不一定是一個錯誤,如果它只是名稱是重疊。有一部分ARC用於瞭解保留計數何時應該更新,您可能會遇到這種情況。

類似規則適用於名稱開頭的使用new(出於同樣的原因)。

在任何名稱的開始處,避開使用init確實很容易明智,除非它實際上是init函數。

我可以想象,你的問題可能與ARC涉及它不應該在哪裏,它需要一段時間才能被調用,應該不會,但那會很奇怪。

我認爲這個問題實際上是另一回事,而名稱更改還有其他一些影響。最糟糕的情況是這意味着你有一個內存問題,改變這個名字已經改變了你的代碼的內存空間,所以你剛剛把這個bug移到了別的地方(或者那些線上的東西)。

+0

我可以在變量名開頭使用'init'和'new'就好了嗎? –

+0

這些命名約定僅適用於(我記得的)方法,而不適用於變量。 –

+0

也似乎爲我工作得很好。如果這在某些情況下確實會導致不可預知的行爲,我不會說這不是一個錯誤。 –