Objective-C和ARC:为什么永远不会读取在初始化期间存储的值?

Win*_*ton 5 iphone cocoa-touch objective-c automatic-ref-counting

我在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];
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行分析器工具时,我在初始化期间值存储到(datesArray和programsDict),从不在行上读取:

NSMutableArray *datesArray = [[NSMutableArray alloc]init];
programsDict = [datesArray objectAtIndex:count];
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Pau*_*l.s 17

问题是您创建一个新的NSMutableArraydatesArray在开始时将其分配给它

NSMutableArray *datesArray = [[NSMutableArray alloc]init];
Run Code Online (Sandbox Code Playgroud)

然后后立即分配一个完全不同的值datesArray

datesArray = [_onDemandDictionary objectForKey:key];
Run Code Online (Sandbox Code Playgroud)

我会先说

NSMutableArray *datesArray = nil;
Run Code Online (Sandbox Code Playgroud)

这是相同的概念programsDict.

  • +1出于某种原因,这似乎是一个常见的问题.我认为初学者觉得只是在没有分配内容的情况下声明字典是错误的.但它完全没问题,使用ARC它是安全的,因为声明的对象初始化为零. (4认同)