NSSet * someSet = [NSSet alloc] init] vs. NSSet * someSet = [NSSet set]

时间:2011-11-30 16:55:08

标签: iphone ios5

  

可能重复:
  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?

或者我完全混淆了两件截然不同的事情?

4 个答案:

答案 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的任何事情。