在iPhone SDK中将对象添加到数组时出现问题
我在iPhone SDK中将对象添加到NSArray时遇到问题。问题是它只添加了我字典的最后一个对象。代码如下:在iPhone SDK中将对象添加到数组时出现问题,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我在iPhone SDK中将对象添加到NSArray时遇到问题。问题是它只添加了我字典的最后一个对象。代码如下: NSArray * processes = [[UIDevice currentDevice] runningProcesses]; for (NSDictionary * dict in processes){ runningprocesses = [[NSMutableArray alloc] init]; NSString *process = [dict ob
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
for (NSDictionary * dict in processes){
runningprocesses = [[NSMutableArray alloc] init];
NSString *process = [dict objectForKey:@"ProcessName"];
[runningprocesses addObject:process];
}
当我输入NSLog
[dict objectForKey:@“ProcessName”]
时,它会显示所有进程,但如果我尝试添加它们,它只会添加最后一个进程。可能会发生什么情况?我重新编辑了您的代码,建议您尝试:
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
NSMutableArray *runningprocesses = [[NSMutableArray alloc] initWithCapacity:[processes count]];
for (NSDictionary * dict in processes){
NSString *process = [dict objectForKey:@"ProcessName"];
[runningprocesses addObject:process];
}
这对我来说很有用:在代码中,每次循环迭代时,
runningprocesss
数组都指向一个新实例
要修复此问题,请将数组实例化移到for循环之外:
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
NSMutableArray *runningprocesses = [[NSMutableArray alloc] init];
for (NSDictionary * dict in processes){
NSString *process = [dict objectForKey:@"ProcessName"];
[runningprocesses addObject:process];
}
每次在for循环中都试图分配“runningprocesss”数组。这就是为什么在for循环的末尾只有一个对象。尝试替换此代码
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
runningprocesses = [[NSMutableArray alloc] init];
for (NSDictionary * dict in processes){
NSString *process = [dict objectForKey:@"ProcessName"];
[runningprocesses addObject:process];
}
这应该是可行的。您应该将
alloc init
语句移到for
循环之外。下面是下面的代码
runningprocesses = [[NSMutableArray alloc] init];
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
for (NSDictionary * dict in processes)
{
NSString *process = [dict objectForKey:@"ProcessName"];
[runningprocesses addObject:process];
}
+1:唯一使用initWithCapacity的答案是:对于NSArray creationies来说,我是一个“容量纳粹”。。。这是我真正信任可变数据的唯一方法,因为在代码中,每次循环迭代时,runningprocesses数组都指向一个新实例。