我正面临内存泄漏问题,如下所示:
我在B组中分配A类对象.//保留类A类对象的数量1
我将对象放在nsmutablearray中。 //保留一类物品的数量成为2
在另一个C类中,我抓住这个nsmutablearray,获取所有元素,如
for(NSInteger f=0; f< [appDelegate.category_type count]; f++)
{
[category_type addObject:[appDelegate.category_type objectAtIndex:f]];
}
在本地的nsmutablearray中,释放第一个B类数组,即appDelegate.category_type。
//保留本地阵列中的一类物体[category_type]成为1
现在在这个C类中,我正在创建一个A类对象,并在本地nsmutablearray中获取元素,如:
A *a = [[A alloc]init];
a = [category_type objectAtIndex:i];
//保留2个成员的数量[分配+保留对象的保留计数1]
我的问题是,我想保留我在tableview中显示的数组category_type,并希望在我在B类中执行的数组中填充新元素后释放它。所以在添加新元素之前,我正在删除B类中的所有元素并使它们为零,因此对a的引用现在为0.而在C类中,我发布了一个dealloc。
但是在仪器 - &gt;泄漏中它显示我在C类中的这个A类对象泄漏。
任何人都可以告诉我哪里出错了。
提前完成。
答案 0 :(得分:0)
我在B组中分配A类对象.//保留一类对象的数量成为1
我将对象放在nsmutablearray中。 //保留一类物体的数量成为2
在另一个C类中,我抓住这个nsmutablearray,在本地的nsmutablearray中获取该数组中的所有元素, // HOW R U FETCHING ???
发布第B类的第一个数组.//保留本地阵列中一类物体的数量1
现在在这个C类中,我正在创建一个A类对象并在本地nsmutable数组中获取元素。 //在本地阵列中保留新类别对象的数量2 [分配+已保留对象与保留计数1]
请详细说明这一点,以便更容易理解问题。
for(NSInteger f=0; f< [appDelegate.category_type count]; f++)
{
[category_type addObject:[appDelegate.category_type objectAtIndex:f]];
}
NSLog(@"appDelegate.category_type count => %d and category_type count => %d",[appDelegate.category_type count],[category_type count]);
尝试编辑的代码并查看两个数组的计数。两者都会打印相同的计数,意味着两者都有对象。 即使在发布appDelegate.category_type数组后,您的对象的保留计数也将为2而不是1.
答案 1 :(得分:0)
我正在努力理解你的问题,这就是我认为你所说的:
1
A *a = [[A alloc] init];
2
[category_type addObject:a];
3
for(NSInteger f=0; f< [appDelegate.category_type count]; f++)
[category_type addObject:[appDelegate.category_type objectAtIndex:f]];
4。
A *a = [category_type objectAtIndex:i];
你需要告诉我们更多关于你发布对象的地方 - 在(3)你说你'发布第一个B类数组' - 你能告诉我们代码吗?
看起来你保留了3次这个对象但没有发布任何代码来表明它已经被释放了。
我认为你需要做更多这样的事情:
1&amp; 2.(在B班)
A *a = [[[A alloc] init] autorelease];
[category_type release];
category_type = [NSMutableArray alloc] init];
[category_type addObject:a];
3。 (在C级)
[category_type release];
category_type = [[NSArray arrayWithArray:appDelegate.category_type] retain];
4
A *a = [category_type objectAtIndex:i];
(在B类和C类的dealloc方法中)
[category_type release];
这里,对象a只是被它所在的数组保留 - 当你不再需要它时,只需释放数组并释放它。您不必担心将其删除或自行释放,这将由步骤(1)中的自动释放和释放阵列来处理。