嗨,我有这个代码来初始化我的课程。
- (id)initWithSize:(int)size {
self = [super init];
if( self != nil )
{
[self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]];
for ( int i = 0; i < size; i++ )
{
[myVector addObject: [[NSMutableArray alloc] initWithCapacity:size]];
}
}
return self;
}
我在仪器中发现了这个漏洞!
类别:CFArray(store-deque)
事件类型:Malloc
有谁知道我需要解决它?
谢谢!
答案 0 :(得分:6)
泄漏是在你的for循环中,也可能是之前的。
首先,这一行:
[self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]];
如果setMyVector
保留传递的数组(根据惯例,它可能应该这样),那么你就泄漏了数组。首先,分配并初始化数组。它的保留计数为+1。然后将其设置为myVector实例变量,这意味着它的保留计数为+2。当你将其他东西放入myVector中,或者在dealloc
方法中释放myVector变量时,你将减少保留计数,这意味着它的保留计数为+1。换句话说,它不会被释放,并且你已经泄漏了数组。
另一个确定的泄漏是在你的for()循环中,你有:
[myVector addObject: [[NSMutableArray alloc] initWithCapacity:size]];
同样,您创建一个保留计数为+1的数组,然后将其添加到myVector数组,该数组将再次保留(+2)。但是,你不再有一个指向数组的指针,所以你已经泄露了它。
使用[NSMutableArray arrayWithCapacity:size]
而不是alloc / init方法可以解决这两个漏洞。这将创建一个自动释放的数组,它将解决您的内存泄漏。
如果您不知道自动释放是什么,那么您可能需要考虑创建数组并将其存储到局部变量中,将其添加到myVector(或将其设置为myVector),然后立即释放它。 / p>