【问题标题】:Objective-C and ARC: Why value stored to during its initialization is never read?Objective-C 和 ARC:为什么在初始化期间存储的值永远不会被读取?
【发布时间】:2012-11-14 15:42:41
【问题描述】:

我将此代码与 ARC 一起使用:

NSMutableDictionary *datesDict = [[NSMutableDictionary alloc]init];
NSMutableArray *datesArray = [[NSMutableArray alloc]init];

for (NSString *key in programsArray) {

    datesArray = [_onDemandDictionary objectForKey:key];
    NSMutableArray *newDates = [[NSMutableArray alloc]init];
    int count;
    for (count = 0; count <datesArray.count; count++) {
        NSMutableDictionary *programsDict = [[NSMutableDictionary alloc]init];
        programsDict = [datesArray objectAtIndex:count];
        [newDates addObject:[programsDict objectForKey:@"date"]];

    }

    [datesDict setObject:newDates forKey:key];
}

但是当我运行分析器工具时,我得到在初始化期间存储到(datesArray 和programsDict)的值永远不会被读取

NSMutableArray *datesArray = [[NSMutableArray alloc]init];
programsDict = [datesArray objectAtIndex:count];

为什么会发生这种情况如何隐藏警告?

谢谢!

【问题讨论】:

    标签: iphone objective-c cocoa-touch automatic-ref-counting


    【解决方案1】:

    问题是您创建一个新的NSMutableArray 并在开头将其分配给datesArray

    NSMutableArray *datesArray = [[NSMutableArray alloc]init];
    

    然后几乎是在您为 datesArray 分配一个完全不同的值之后立即使用

    datesArray = [_onDemandDictionary objectForKey:key];
    

    我只是开始

    NSMutableArray *datesArray = nil;
    

    programsDict 的概念相同。

    【讨论】:

    • +1 出于某种原因,这似乎是一个常见问题。我认为初学者觉得只声明字典而不给它分配东西是错误的。但它完全没问题,并且使用 ARC 是安全的,因为声明的对象被初始化为 nil。
    • 感谢您的见解!感谢您的帮助!
    【解决方案2】:

    在第 2 行,您创建了一个新数组 datesArray
    然后,在第 6 行(for 循环的第一行),将新值设置为 datesArray

    编译器只是警告您,第 2 行无效,并且代码存在错误(从某种意义上说,它没有达到您的预期)。
    没错,programsArray 可能是一个空数组,在这种情况下,您希望 datesArray 在您向我们展示的 sn-p 之后被初始化以使用它,但最好明确这一点。

    对于programsDict,就更简单了:用... alloc] init]初始化,然后设置成datesArray的对象,这样第一次操作就没有用了。

    【讨论】:

    • 感谢您的见解!感谢您的帮助!
    【解决方案3】:

    你没有在你的循环中使用 datesArray,你只是给它赋值,所以要么把它当作 nil 数组

    NSMutableArray* datesArray = nil;
    

    或喜欢

    NSMutableArray *datesArray;
    

    删除警告。

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2018-07-26
      • 2015-07-26
      • 2012-01-19
      相关资源
      最近更新 更多