关于iPhone中的内存管理

时间:2011-08-30 20:10:22

标签: iphone memory-management

请澄清以下内容。

每个人都知道;如果我们使用allocretainnewetc...,我们必须发布它。对于剩下的事情,我们必须使用autorelease。我怀疑是;

-(NSArray*)getArray{
    NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
    return [array autorelease];
}
NSArray *arr = [self getArray];
---
---

我们必须做什么arr

修改

NSString *str = [NSString stringWithFormat:@"Welcome..."];

如果我们使用上述声明,我们应该致电autorelease。但我想知道,stringWithFormat:方法中发生了什么。如何返回NSString

感谢。

4 个答案:

答案 0 :(得分:1)

如果您打算返回数组,请继续使用[NSArray arrayWithObjects:@“1”,@“2”等,nil]。

然后你需要记住保留它,如果你想保持它更久,那么自动释放池将保留它。

自动释放池将保留计数为1,然后在调用发布池时自动将其减1。如果不将其保留在调用函数中,该对象最终将消失。

答案 1 :(得分:1)

由于您未在当前范围内明确alloccopynewretain,因此您无需对arr执行任何操作。它已被添加到自动释放池中,因此一旦完成它就会自动清理。

编辑:在您编辑的问题中,[NSString stringWithFormat:]会返回自动释放的字符串。它基本上和你在getArray方法中做的一样。它构建一个NSString(或相关的)对象,并在它返回之前自动释放它。

答案 2 :(得分:0)

你应该保留:

[[self getArray] retain];

或者在getArray中返回非自动释放的对象。

答案 3 :(得分:0)

你的getArray方法返回一个NSArray,它在堆栈完全展开时释放_will_be_。

在调用getArray方法的方法中,使用NSArray是安全的,但是如果要保留它,并在当前方法返回后使用它,则需要使用[arr retain]保留NSArray ]

回答您的新问题

类方法,如[NSString stringWithFormat:]或类似[NSURL URLWithString:],返回已自动释放的对象。这是一个惯例,是UIKit和Apple框架中的标准做法。