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



可能的重复项:
在Objective-C中分配内存的这两种方式有什么区别?

我被这个绊倒了。我意识到我不明白何时必须使用 alloc init 为堆上的对象创建空间的概念。

通过NSSet的类参考,我找到了类方法"set"(http://goo.gl/ndHjK(。

它的描述是"创建并返回一个空集",这听起来正是我想要的。那么这个"set"方法是否隐式地为我执行了分配初始化?

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

>[NSSet set]被称为方便构造函数。它返回一个自动释放的对象,这意味着您不必关心该对象的内存管理,除非您明确保留它。

如果显式分配它,则还必须释放它。

方便构造函数通常如下所示:

+ ( NSSet *)set
{
    return [ [ [ NSSet alloc ] init ] autorelease ];
}

是的。 [NSSet set]等于 [[NSSet alloc] init] autorelease] .

[NSSet set] 通过 alloc/init/autorelease 创建一个集合。这是可可中常见的命名约定。如果要在当前方法的范围之外使用它,则应在返回的集上调用 keep。

你到底想用一个空列表做什么? 通常空集方法仅由NSMutableSet使用。

无论如何,当你想要控制它的内存时,你应该使用 [[NSSet alloc] init][NSSet set]返回一个 autorelease d 集合,所以你不对它负责;任何你alloc你负责的事情。

最新更新