在iPhone SDK中将对象添加到数组时出现问题

在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

我在iPhone SDK中将对象添加到NSArray时遇到问题。问题是它只添加了我字典的最后一个对象。代码如下:

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数组都指向一个新实例。