gpt4 book ai didi

iphone - NSMutableArray 内存管理

转载 作者:行者123 更新时间:2023-12-03 16:01:26 25 4
gpt4 key购买 nike

NSMutableArray *a1 = [[NSMutableArray alloc] init];
NSMutableArray *a2 = [NSMutableArray array];

TempObj *obj = [[TempObj alloc] init]; //assume this line is repeated for each obj
[a1 addObject:obj];
[a1 addObject:obj2];
[a1 addObject:obj3];
[a1 addObject:obj4];

[obj release];
[obj2 release];
[obj3 release];
[obj4 release];

[a1 release];

好吧,a2 是一个自动释放对象,所以我不必在它上面调用释放?另外你怎么知道你什么时候得到一个自动释放对象?

对于 a1,我不必循环遍历数组并首先释放每个对象?如果我调用 [a1 removeAllObjects]; 会怎样?是否调用 [[a1 objectAtIndex:#] release];

将这些对象添加到数组后,我是否应该释放它们?

最佳答案

当您将对象添加到数组时,它会对该对象调用retain。如果您不释放指向该对象的指针,则会发生泄漏。当您释放数组时,它将对其保存的所有对象调用 release,因为它之前调用了 retain

对于自动释放与释放,唯一可以确定的方法(除了可能阅读文档之外)是通过方法的名称。我认为一般规则是,如果您没有分配该对象,那么您不负责释放它。

关于对象创建方法,所有便捷方法(array:arrayWithObjects:arrayWithArray: 等)都返回 autoreleased对象。但是,它们相应的 init 方法(init:initWithObjects:initWithArray: 等)不会 - 如果您调用它们,那么您就是负责对返回的对象调用release

我似乎在这里记忆起有关此主题的其他一些问题 - 您可以尝试四处搜索以获取更全面的解释。

关于iphone - NSMutableArray 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456233/

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