我在 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];
为什么会发生这种情况?如何隐藏警告?
谢谢!
答案 0 :(得分:17)
问题是您创建了新的NSMutableArray
并在开头将其分配给datesArray
NSMutableArray *datesArray = [[NSMutableArray alloc]init];
然后几乎在您使用
为datesArray
分配完全不同的值之后立即
datesArray = [_onDemandDictionary objectForKey:key];
我只想从
开始NSMutableArray *datesArray = nil;
这与programsDict
的概念相同。
答案 1 :(得分:2)
在第2行,您创建一个新数组datesArray
然后,在第6行(for循环的第一行)上,将新值设置为datesArray
。
编译器只是警告你第2行没有效果,并且代码被窃听(从某种意义上说它不符合你的预期)。
是的,programsArray
可能是一个空数组,在这种情况下,您只需要初始化datesArray
以在您向我们展示的代码段之后使用它,但最好将其显式化。< / p>
对于programsDict
,它更容易:您使用... alloc] init]
初始化它,然后将其设置为datesArray
的对象,使第一个操作无用。
答案 2 :(得分:0)
你没有在你的循环中使用datesArray,你只需要赋值给它,所以要么把它取为nil数组,如
NSMutableArray* datesArray = nil;
或喜欢
NSMutableArray *datesArray;
删除waring。