2

iOS開発用のObjectiveCを学び始めたところです。私は次のコードを理解しようとしています:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"BirdSightingCell";

    static NSDateFormatter *formatter = nil;
    if (formatter == nil) {
        formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    BirdSighting *sightingAtIndex = [self.dataController objectInListAtIndex:indexPath.row];
    [[cell textLabel] setText:sightingAtIndex.name];
    [[cell detailTextLabel] setText:[formatter stringFromDate:(NSDate *)sightingAtIndex.date]];
    return cell;
}

質問1:

変数CellIdentifierとformatterを宣言している間、「静的」は何をしますか?静的と宣言しなくても機能するので、静的を使用する利点は何ですか?

Q2:

static NSDateFormatter *formatter = nil;
if (formatter == nil) {

この表現はいつも本当ではないですか?そこでifステートメントを使用するのはなぜですか?

4

2 に答える 2

2

これstaticは、変数がnilプログラムの起動時に、そのステートメントを「実行」するたびにではなく1回に設定され、複数の関数呼び出しにわたってその値を維持することを意味します。

したがって、その関数を初めて呼び出すと、その関数が呼び出されnilifステートメントが実行されます。その後の関数の呼び出しでは、ステートメントnil内のコードが再度実行されないように、関数が非値に設定されます。if

これはレイジー初期化と呼ばれます。

于 2012-11-25T22:03:01.070 に答える
2

staticこのコンテキストでは、このメソッドへの複数の呼び出しにまたがる「共有」変数であることを意味します。初めて呼び出されると、静的変数はになりますnil。次回は、前回の通話時に設定されたものになります。

于 2012-11-25T22:03:49.160 に答える