我需要帮助解除我的自定义对象的NSMutableArray。我需要保留数组,所以我在.h中添加了一个属性,然后在.m文件的dealloc中释放它。当我向数组添加对象时,我会执行以下操作:
myarray = [[NSMutableArray alloc] init];
[myarray addObject:[[mycustomObject alloc]initWithObject:obj1]];
[myarray addObject:[[mycustomObject alloc]initWithObject:obj2]];
现在,我不知道如何发布mycustomobject。如果我执行以下操作:
[myarray addObject:[[[mycustomObject alloc]initWithObject:obj1] autorelease]];
我稍后访问数组时会遇到问题。请指教。
答案 0 :(得分:5)
我认为您不了解Cocoa中的内存管理是如何工作的。该数组将保留您添加到其中的对象,当阵列不再需要它时(例如释放数组时),它将自行释放它们。
换句话说,将自动释放的对象添加到数组中,之后不要担心它的保留计数。如果要将其从数组中删除,只需将其删除(使用removeObjectAtIndex:
或类似的东西)。如果您认为要释放对象而不从阵列中删除它,那么您做错了,因为这可能会在您的数组中留下一个悬空指针,这会导致您以后崩溃。
你应该真的重新审视documentation,尤其是关于Object Ownership and Disposal的部分。
答案 1 :(得分:3)
执行此操作的正确方法是让阵列保持自定义对象的所有权:
NSMutableArray * array = [[NSMutabelArray alloc] init];
for (id obj in anArrayOfObjects) {
mycustomObject * customObj = [[mycustomObject alloc] initWithObject:obj];
[array addObject:customObj];
[customObj release];
}
如果您以后在访问阵列时遇到困难,那么您在对阵列的内存管理方面做错了。