我有一个包含快乐对象的数组。每当我试图清除所有对象的数组并重新填充它时,这些对象都会恶意地打开(泄漏)我。
它是在in it函数中分配的,如下所示

self.list = [NSMutableArray array];

我用来清除它的不同方法包括:
self.list = nil;
self.list = [NSMutableArray array];


[self.eventList removeAllObjects];

显式地分配和释放数组也不起作用。只有当我试图重置列表时才会发生泄漏。
我是在重置时遗漏了一步,还是这是另一个问题?

最佳答案

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

- (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 memory management rules。放弃所有权是你的责任。如果不这样做,对象将永远不会被释放,您将看到泄漏。
但是,您不会立即看到泄漏,因为您将对象传递给数组,数组也拥有这些对象的所有权。只有从数组中移除对象或取消分配数组本身时,才能识别泄漏。当这些事件中的任何一个发生时,数组放弃对象的所有权,它们将在您的应用程序中留下“Live”,但是您将没有任何引用。

关于objective-c - NSMutableArray销毁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/179665/

10-10 13:23