お願いします。
循環参照を防ぐための、弱い参照の使い方でいろいろと試しています。弱い参照のみで参照してるオブジェクトが解放されないように思える現象があり、質問させて頂きます。
(アップルのPrograming with Objective-Cの中のpropertyのところを参考にしています)

//date1に現在の時刻を参照させる。(強い参照で)
NSDate *date1 = [[NSDate alloc] init]; 

//date2にも同じ時刻を参照させる。(弱い参照で)
NSDate * __weak date2 = date1; 

//date1に別の時刻を参照させる。(最初に参照していた現在の時刻への強い参照はなくなる)
date1 = [[NSDate alloc] initWithString:@"2000-01-01 00:00:00 +0000"];  

NSLog(@"date1 is %@", date1); //date1は変更後の時刻(2000年1月1日)を参照
NSLog(@"date2 is %@", date2); //date2はnullになる

上記のようにdate2を弱い参照にすると、date1の参照先が変わるとdate2がnullになることが
確認できました。(強い参照だと現在の時刻を保持します)しかし、1行目のコードを日付を指定してNSDateを生成するコードに変更すると、例えば、

NSDate *date1 = [[NSDate alloc] initWithString:@"2000-12-31 23:59:59 +0000"];

とするとdate1の参照先が変わってもdate2はこの日付を保持し、nullになりません。なぜでしょうか。また扱うデータの型をNSString型にしても、同じように弱い参照のみで参照しているオブジェクトが解放されないようです。よろしくお願いします。