可能重复:
What is the difference between these two ways of allocating memory in Objective-C?
我被绊倒了。我意识到我不理解何时必须使用alloc init为堆上的对象创建空间的概念。
通过NSSet的类引用,我发现了类方法“set”(http://goo.gl/ndHjK)。
它的描述是“创建并返回一个空集。”,这听起来就像我想要的那样。那么这个“set”方法是否会隐式地为我执行alloc init?
或者我完全混淆了两件截然不同的事情?
答案 0 :(得分:2)
[NSSet set]
被称为便利构造函数。它返回一个自动释放的对象,这意味着您不必关心该对象的内存管理,除非您当然明确地保留它。
如果明确分配,则还必须将其释放。
便利构造函数通常看起来像这样:
+ ( NSSet *)set
{
return [ [ [ NSSet alloc ] init ] autorelease ];
}
答案 1 :(得分:1)
是。 [NSSet set]
等于[[NSSet alloc] init] autorelease]
。
答案 2 :(得分:0)
[NSSet set]通过alloc / init / autorelease创建一个集合。这是Cocoa中常用的命名约定。如果要在当前方法的范围之外使用它,则应该在返回的集合上调用retain。
答案 3 :(得分:0)
你想用空列表做什么?通常,空集方法仅由NSMutableSet
使用。
无论如何,当你想要控制它的记忆时,你应该使用[[NSSet alloc] init]
,[NSSet set]
返回autorelease
d集,所以你不对它负责;您负责alloc
的任何事情。