内存泄漏场变量

时间:2011-05-17 22:21:53

标签: iphone objective-c ios4 memory-management memory-leaks

我不会解释为什么我不能简单地添加[sortedArray release];在这个方法的最后。每次我这样做,都会崩溃。

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSString *workoutName =  [event.assignedWorkout valueForKey:@"name"];
self.title = workoutName ;
NSMutableArray *sortedArray = [[NSMutableArray alloc]init];

// Sort ExerciseArray
int y = 0;
int x= 0;
do{
    if ([[[exerciseArray objectAtIndex:y] index]intValue] == x){
        [sortedArray addObject:[exerciseArray objectAtIndex:y] ];
        x++;
        }
        if (y<[exerciseArray count]-1){
                y++;
            }else {
                y=0;
            }

}
while(x <= [exerciseArray count]-1);

exerciseArray = sortedArray;
[self.tableView reloadData];

}

如果有人能指出我正确的方向或参考我的一些文件,我将非常感激。

2 个答案:

答案 0 :(得分:2)

您正在将数组分配给exerciseArray变量,然后释放数组。下次尝试访问exerciseArray变量时,数组将消失,因为将其分配给exerciseArray变量不会增加其保留计数。

第一次调用alloc时,数组对象的保留计数为1。当你将它分配给exerciseArray时,它的保留值仍然是1.然后,当你释放它时,它的保留计数会降到0,你不能期望再次访问该数组。

您应该不释放它(我的偏好),或者通过调用显式保留它:

[exerciseArray release];
exerciseArray = [sortedArray retain];
[sortedArray release];

请注意这两条消息的顺序。第一行释放exerciseArray变量指向的任何现有对象。第二行将新数组的保留计数提高到2,然后第二行将其降为1,因此数组仍然保留。如果在将新数组分配给sortedArray变量之前释放exerciseArray,则保留计数将变为0,并且在将其分配给新变量之前将丢失它。

答案 1 :(得分:0)

您可能想要这样做:


[exerciseArray release];
exerciseArray = sortedArray;
[self.tableView reloadData];

顺便说一下,您可以使用带有sortedArrayUsingComparator的块对数组进行排序。