Apple代码:将对象初始化为nil,然后

Buf*_*alo 1 objective-c

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

    // Date formatter for displaying dates
    static NSDateFormatter *dateFormatter = nil;
    if(dateFormatter == nil){
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
        [dateFormatter setDateFormat:NSDateFormatterMediumStyle];
    }
Run Code Online (Sandbox Code Playgroud)

为什么我们初始化dateFormatter变量然后立即测试它是否为零?我在较新的Apple代码中注意到了这一点.好奇!

-水牛

Jas*_*oco 5

这是因为变量是一个局部静态变量,这意味着即使在本地函数返回或超出范围之后它也会保持其值.因此,第一次执行该函数时,该变量设置为nil.然后,检查nil并初始化变量(这只发生一次).每次执行该函数时,该变量都将具有非零值,因此不会执行初始化代码块.