Iphone 自定义getter为null
如果使用此自定义getter:Iphone 自定义getter为null,iphone,objective-c,ios,xcode,cocoa-touch,Iphone,Objective C,Ios,Xcode,Cocoa Touch,如果使用此自定义getter: -(NSMutableArray *)queue { if (_queue == nil) { if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) { return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
-(NSMutableArray *)queue
{
if (_queue == nil)
{
if ([[NSFileManager defaultManager] fileExistsAtPath:kOfflineQueueFilePath]) {
return [NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
//[NSKeyedUnarchiver unarchiveObjectWithFile:kOfflineQueueFilePath];
}else{
return [[NSMutableArray alloc] init];
}
}
}
_队列始终为空。我不知道为什么会这样
但如果我在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;