iPhone アプリで NSDate の範囲外で問題が発生しました。
次のように定義されたインターフェイスがあります。
@interface MyObject : NSoObject {
NSMutableArray *array;
BOOL checkThis;
NSDate *nextDue;
}
実装では、これがあります:
-(id) init
{
if( (self=[super init]) ) {
checkThis = NO;
array = [[NSMutableArray alloc] init];
nextDue = [[NSDate date] retain];
NSDate *testDate = [NSDate date];
}
return self;
}
ここで、実際に変数を割り当てる前に init をトレースすると、checkThis はブール値として表示されます。配列は割り当てられていないため、ポインター 0x0 として表示されます。しかし、nextDue は「範囲外」として表示されます。これが範囲外である理由はわかりませんが、他の変数はそうではありません。
変数が割り当てられるまでコードをトレースすると、配列は正しく割り当てられているように表示されますが、nextDue はまだ範囲外です。興味深いことに、testDate 変数は適切に割り当てられており、デバッガーはこれを有効な日付として表示します。
さらに興味深い点は、デバッグ中にマウスを testDate 変数の上に移動すると、「NSDate *」タイプとして表示されることです。これは、その定義であるためです。それでも、同じように定義されている nextDue は、'_NSCFDate *' として表示されます。
この件に関して私が行ったグーグル検索は、保持が問題であると言っていましたが、変数を割り当てようとする前に、実際には範囲外です。
ただし、別のクラスでは、NSDate の同じ定義が正常に機能します。値が割り当てられる前は nil として表示されます。ああああ