您是如何创建泄漏的对象的?如果你做了这样的事情:
- (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 内存管理规则创建了两个对象。放弃所有权是您的责任。如果你不这样做,对象将永远不会被释放,你会看到一个泄漏。
但是,您不会立即看到泄漏,因为您将对象传递给数组,该数组也拥有它们的所有权。只有当您从数组中删除对象或数组本身被释放时,才会识别出泄漏。当其中任何一个事件发生时,数组将放弃对象的所有权,并且它们将在您的应用程序中保持“活动”状态,但您不会对它们有任何引用。