当前位置:  开发笔记 > IOS > 正文

NSMutableArray破坏

如何解决《NSMutableArray破坏》经验,为你挑选了2个好方法。

我有一个NSMutableArray快乐对象的数组.每当我尝试清除所有对象的数组并重新填充它时,这些对象就会恶意地打开(泄漏)我.

它是在init函数中分配的

self.list = [NSMutableArray array];

我用来清除它的不同方法包括:

self.list = nil;
self.list = [NSMutableArray array];

[self.eventList removeAllObjects];

显式分配和释放数组也不起作用.只有在我尝试重置列表时才会发生泄漏.

我在重置时错过了一个步骤,或者这是一个不同的问题?



1> mmalc..:

你是如何创建泄漏的对象的?如果你做了这样的事情:

- (void)addObjectsToArray {

    [list addObject:[[MyClass alloc] init];

    OtherClass *anotherObject = [[OtherClass alloc] init];
    [list addObject:anotherObject];
}

然后,当释放列表时,您将泄漏两个对象.

您应该用以下代码替换任何此类代码

- (void)addObjectsToArray {

    MyClass *myObject = [[MyClass alloc] init];
    [list addObject:myObject];
    [myObject release];

    OtherClass *anotherObject = [[OtherClass alloc] init];
    [list addObject:anotherObject];
    [anotherObject release];
}

更详细:

如果您遵循第一个模式,则根据您拥有的Cocoa内存管理规则创建了两个对象.放弃所有权是你的责任.如果不这样做,该对象将永远不会被释放,您将看到泄漏.

但是,您没有立即看到泄漏,因为您将对象传递给数组,而数组也拥有它们的所有权.只有从阵列中删除对象或解除分配阵列本身时,才会识别泄漏.当其中任何一个事件发生时,数组将放弃对象的所有权,并且它们将在您的应用程序中保持"实时",但您将不会对它们进行任何引用.



2> Nathan Kinsi..:

你指的是数组泄漏的对象吗?

你是如何向数组添加对象的?数组将保留它们,因此您需要在将它们添加到阵列后自动释放或释放它们.否则在释放数组后,对象仍将保留(泄露).

MyEvent *event = [[MyEvent alloc] initWithEventInfo:info];
[self.eventList addObject:event];
[event release];

MyEvent *otherEvent = [[[MyEvent alloc] initWithEventInfo:otherInfo] autorelease];
[self.eventList addObject:otherEvent];

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有