Iphone 仪器指向内存泄漏!
您好,我有这个初始化类的代码。Iphone 仪器指向内存泄漏!,iphone,objective-c,memory-leaks,instruments,Iphone,Objective C,Memory Leaks,Instruments,您好,我有这个初始化类的代码。 - (id)initWithSize:(int)size { self = [super init]; if( self != nil ) { [self setMyVector:[[NSMutableArray alloc] initWithCapacity:size]]; for ( int i = 0; i < size; i++ ) { [myVe
- (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;
}
-(id)initWithSize:(int)大小{
self=[super init];
if(self!=nil)
{
[self-setMyVector:[[NSMutableArray alloc]initWithCapacity:size]];
对于(int i=0;i
我要把仪器弄漏了类别:CFArray(商店名称)
事件类型:Malloc
有人知道我需要解决什么吗?
谢谢泄漏在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 arraywhithcapacity:size]
而不是alloc/init方法来解决。这将创建一个自动释放的数组,它将解决内存泄漏问题
如果您不知道自动还原是什么,那么您可能需要考虑创建数组并将其存储到局部变量中,将其添加到MyVo向量中(或者将其设置为MyValm),然后在之后立即释放它。
< P>该漏洞在您的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 arraywhithcapacity:size]
而不是alloc/init方法来解决。这将创建一个自动释放的数组,它将解决内存泄漏问题
如果您不知道自动还原是什么,那么您可能需要考虑创建数组并将其存储到局部变量中,将其添加到MyVo向量中(或者将其设置为MyValm),然后在之后立即释放它。
<代码>如果(自!.NIL)< /代码>可以由<代码>替换为(自)。
可以由if(self)
替换。