无法获得所有想要的信息

时间:2011-07-27 01:11:33

标签: objective-c ios

我正在构建一个应用程序,通过UITableView列出iPhone中的所有后台进程。但是,它仅成功列出最后一个processID和processName。

获取进程信息的方法存储在viewDidLoad方法中,看起来像这样

- (void)viewDidLoad {


int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
size_t miblen = 4;

size_t size;
int st = sysctl(mib, miblen, NULL, &size, NULL, 0);

struct kinfo_proc * process = NULL;
struct kinfo_proc * newprocess = NULL;

do {

    size += size / 10;
    newprocess = realloc(process, size);

    if (!newprocess){

        if (process){
            free(process);
        }


    }

    process = newprocess;
    st = sysctl(mib, miblen, process, &size, NULL, 0);

} while (st == -1 && errno == ENOMEM);

if (st == 0){

    if (size % sizeof(struct kinfo_proc) == 0){
        int nprocess = size / sizeof(struct kinfo_proc);

        if (nprocess){

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

            for (int i = nprocess - 1; i >= 0; i--){


                NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
                NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
                NSString * combinedString = [NSString stringWithFormat:@"%@ %@ %@", processID, @"           " ,processName];

                NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil]
                                                                    forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]];




                    arryData =  [[NSArray alloc] initWithObjects:[[NSMutableString alloc]initWithFormat:@"%@", combinedString], nil];





                //For debugging purposes
                NSLog(@"%@", dict);


                [processID release];
                [processName release];
                [array addObject:dict];
                [dict release];
            }

            free(process);
            return [array autorelease];
        }
    }
}



[super viewDidLoad];
}

我的表格方法如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [arryData count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return @"Process ID              Process Name";
}



// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}


// Set up the cell...
NSString *cellValue= [arryData objectAtIndex:indexPath.row];

cell.text = cellValue;
return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
@end

非常感谢任何帮助! :)

1 个答案:

答案 0 :(得分:0)

在for循环的每次迭代中,将arryData分配给新数组。 arryData无法包含多个元素。此外,你可能正在泄漏所有阵列中的最后一个。