自定义获取总是得到空值

如果我这样获取值:

-(NSMutableArray *)queue
{
    if (_queue == nil)
    {
        if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
            return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];

            //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
        }else{
            return [[NSMutableArray alloc] init];
        }
    }
}

_queue值就为零,原因也不清楚。

但是如果在init中使用同样的代码:

 if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {            
        sharedQueue.queue =  [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
    }else{
        sharedQueue.queue = [[NSMutableArray alloc] init];
    }

就可以正常运行,为什么这样?

创建自定义getter要在返回值前设置底层ivar:

if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
    return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];

    //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
}else{
    return [[NSMutableArray alloc] init];
}

改为:

if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
    _queue = [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];

    //[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
}else{
    _queue =  [[NSMutableArray alloc] init];
}
return _queue;

就可以了