请澄清以下内容。
每个人都知道;如果我们使用alloc
,retain
,new
和etc...
,我们必须发布它。对于剩下的事情,我们必须使用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
。
感谢。
答案 0 :(得分:1)
如果您打算返回数组,请继续使用[NSArray arrayWithObjects:@“1”,@“2”等,nil]。
然后你需要记住保留它,如果你想保持它更久,那么自动释放池将保留它。
自动释放池将保留计数为1,然后在调用发布池时自动将其减1。如果不将其保留在调用函数中,该对象最终将消失。
答案 1 :(得分:1)
由于您未在当前范围内明确alloc
,copy
,new
或retain
,因此您无需对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框架中的标准做法。