我有一个包含快乐对象的数组NSMutableArray。每当我试图清除所有对象的数组并重新填充它时,这些对象就会恶意地启动(泄漏)我。
它在init函数中分配,如下所示
self.list = [NSMutableArray array];我用来清除它的不同方法包括:
self.list = nil;
self.list = [NSMutableArray array];和
[self.eventList removeAllObjects];显式分配和释放数组也不起作用。仅当我尝试重置列表时才会发生泄漏。
我是在重置时遗漏了一个步骤,还是这是一个不同的问题?
发布于 2008-10-10 04:13:30
您是如何创建泄漏的对象的?如果你做了这样的事情:
- (void)addObjectsToArray {
[list addObject:[[MyClass alloc] init];
OtherClass *anotherObject = [[OtherClass alloc] init];
[list addObject:anotherObject];
}然后,当list被释放时,您将泄漏两个对象。
您应该将任何此类代码替换为:
- (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。放弃所有权是你的责任。如果您不这样做,对象将永远不会被释放,并且您将看到一个泄漏。
不过,您不会立即看到泄漏,因为您将对象传递给数组,数组也会获得它们的所有权。只有当您从数组中删除对象或数组本身被释放时,才会识别泄漏。当这两个事件中的任何一个发生时,数组将放弃对象的所有权,并且它们将在您的应用程序中“活动”,但您将不会有任何对它们的引用。
发布于 2008-10-07 19:08:43
你指的是数组中的对象泄漏吗?
如何将对象添加到数组中?阵列将保留它们,因此您需要在将它们添加到阵列后自动释放或释放它们。否则,在释放数组后,对象仍将保留(泄漏)。
MyEvent *event = [[MyEvent alloc] initWithEventInfo:info];
[self.eventList addObject:event];
[event release];
MyEvent *otherEvent = [[[MyEvent alloc] initWithEventInfo:otherInfo] autorelease];
[self.eventList addObject:otherEvent];发布于 2008-10-07 18:13:04
你的@property声明是什么样子的?你在合成存取器吗?如果是这样的话,您需要@property(retain)。我假设当您说对象正在攻击您时,您指的是核心转储(EXC\_BAD\_ACCESS)。
https://stackoverflow.com/questions/179665
复制相似问题