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)
替换。