アップルのドキュメントでは、NSDateオブジェクトは不変であると言われています。これは、いったん値で初期化されると変更できない/変更されないことを意味します。Objective-C - スコープとメモリ管理の内部の不変宣言?
しかし、私は当然、私が使用する可能性のある2つの可能な値の一つであることがNSDateを必要とし、次のコードで:外fromDateからを使用しているため
for (class* object in array) {
if (i == 0) {
NSDate* fromDate = //...a date
} else {
NSDate* fromDate = //...a different date
}
//Use fromDate
i++
}
限り、私は承知しているとして、これは有効ではありませんifブロックはスコープの外にあります。
ソリューションは、通常、次のようになります。
for (class* object in array) {
NSDate* fromDate = [[NSDate alloc] init];
if (i == 0) {
fromDate = //...a date
} else {
fromDate = //...a different date
}
//Use then release fromDate
i++
}
しかし、Appleのドキュメントによれば、NSDateを受信したとき「を初期化」が今日の日付で初期化されますと、それは不変なので、私はそれを再割り当てすることはできません。
ここで正しいことは何ですか?すべてのコードをifブロックに2回コピーするだけですか?あるいは、私は不変の言葉を誤解したことがありますか?あるいは、最初の例の割り当て後に私は保持する必要がありますか?
おかげ
用語は、不変性を誤解する可能性があることを示しています。 'fromDate'はポインタであるだけで、スコープ内で好きなだけ頻繁に再利用できます。ここにあるNSDateのように、割り当てられたオブジェクトは不変である可能性があります。つまり、作成後に変更することはできません。不変オブジェクトは変更できませんが、不変オブジェクトへのポインタは同じクラスの別のオブジェクトに再割り当てできます。これは非常に重要な違いです。 – Endemic