2016-07-06 9 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が関係しないことに関係していると思われます。何かが呼び出されてはならないが、それは変わってしまいます。

私はこの問題は実際には他のものであり、名前の変更には別の効果があると思います。最悪の場合、メモリの問題があり、名前の変更によってコードのメモリフットプリントが変更されたため、バグを別の場所(またはその行に沿ったもの)に移動したことになります。

+0

変数名の先頭に 'init'と' new'を使用できますか? –

+0

これらの命名規則は、(私が覚えている限り)メソッドにのみ適用され、変数には適用されません。 –

+0

私にとってもうまくいくようです。これによって実際には予測できない動作が起こる場合がありますが、バグではないとは言いません。 –

関連する問題