1

在函数内部,我有一个局部变量,它保存着一个成员变量的日期副本。代码顶部对 _date 没有任何保护。

if (!_date) return;

NSDate *date = [[_date copy] autorelease];

块中使用的函数日期较低。

但是,在块内有时(罕见)日期为零。在执行此操作的函数中没有其他对发布日期的调用。谁能解释发生了什么?

代码示例在这里:

    NSDate *date = [[_date copy] autorelease];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Cache Label Image
    NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease];

    //Name of day label
    UILabel *nameOfDay = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
    [weekday setDateFormat: @"EEE"];
    nameOfDay.text = [weekday stringFromDate:date];
    [nameOfDay sizeToFit];

    // Draw it on background thread using ImageContext

    dispatch_async(dispatch_get_main_queue(), ^{
        if(![date isEqualToDate:_date])
            return;
        .
        .
        .
        .   
    });
});
4

1 回答 1

0

很可能_date在你的块被执行之前被设置为 nil。当您将_date块编译器线程放置为self->_date并保持强引用self而不是_date复制块时。可能你只需要搬出NSDate *date = [[_date copy] autorelease];街区。

请参阅此处了解更多信息

于 2013-05-22T19:09:03.480 回答