我有一个数组NSMutableArray
与快乐的物体。每当我尝试清除所有对象的数组并重新填充它时,这些对象就会恶意地打开(泄漏)我。
它是在 init 函数中分配的,如下所示
self.list = [NSMutableArray array];
我用来清除它的不同方法包括:
self.list = nil;
self.list = [NSMutableArray array];
and
[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内存管理规则 http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/MemoryManagementRules.html你拥有。放弃所有权是您的责任。如果不这样做,该对象将永远不会被释放,并且您将看到泄漏。
不过,您不会立即看到泄漏,因为您将对象传递给数组,数组也获取了它们的所有权。仅当您从数组中删除对象或数组本身被释放时,才会识别泄漏。当这些事件中的任何一个发生时,数组都会放弃对象的所有权,并且它们将在您的应用程序中保持“活动”状态,但您不会有任何对它们的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)