2

私がこのコードを持っているとしましょう:

NSString *inspDate = @"20120515";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyyMMdd"];
NSDate *inspectionDate;
inspectionDate = [dateFormatter dateFromString:inspDate];

それが機能する(正しくフォーマットされたデータが含まれている)ことを確認すると、NSDate機能します...しかし、なぜですか?

ここで手順を実行します。

  1. のメモリNSDateFormatterが割り当てられ、ヒープ内でインスタンス化されています。dateFormatterその場所を指しています、それを手に入れました:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    
  2. 今、'sを日付としてdateFormatter解釈する方法を教えられています、わかりました:NSString

    [dateFormatter setDateFormat:@"yyyyMMdd"];
    
  3. これがぼんやりしている部分ですinspectionDate。ポインタはnilに設定されています。それは何も指していません:

    NSDate *inspectionDate;
    
  4. がなかった、または呼び出されたときに、ポインタをどのようにdateFormatter返しますか?の実装とその実装はありますか?NSDateallocinitinspectionDatedateFromStringallocinit

     inspectionDate = [dateFormatter dateFromString:inspDate];
    

私がこれを視覚化するのを手伝うことは、途方もない助けになるでしょう。ありがとうございました!

4

1 に答える 1

2

このdateFromStringメソッドは、オブジェクトをインスタンス化し(おそらく、ある時点でのalloc / init呼び出し、またはNSDateそれ自体が割り当てを行う便利なメソッドを介して)、NSDateオブジェクトをinspectionDate変数に割り当てます。alloc、、、newまたはで始まらない「コンビニエンス」メソッドと同様copyに、オブジェクトの所有権は譲渡されません。つまり、返されたインスタンスは自動解放されます。

于 2012-12-01T18:17:55.270 に答える