gpt4 book ai didi

objective-c - NSMutableArray 销毁

转载 作者:太空狗 更新时间:2023-10-30 03:19:04 25 4
gpt4 key购买 nike

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

在init函数中是这样分配的

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你拥有。放弃所有权是您的责任。如果不这样做,该对象将永远不会被释放,并且您会看到泄漏。

不过,您不会立即看到泄漏,因为您将对象传递给了数组,而数组也获得了它们的所有权。只有当您从数组中删除对象或数组本身被释放时,才会识别出泄漏。当其中任何一个事件发生时,数组将放弃对象的所有权,并且它们将在您的应用程序中保持“事件”状态,但您不会对它们有任何引用。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com