释放使用initWithInteger创建的NSNumber实例:与numberWithInt:

时间:2011-06-23 07:19:43

标签: objective-c cocoa memory-management

Objective-C 2.0编程一书的第326页上,作者说:

myNumber = [[NSNumber alloc] initWithInt: 1000];  
  

当然,根据之前的讨论,如果您以这种方式创建myNumber,那么当您使用以下语句完成后,您有责任随后将其发布:

[myNumber release];  

我的问题是:

这是否意味着如果我使用此语句创建NSNumber对象

NSNumber *myNumber = [NSNumber numberWithInteger: 100];  

我不必自己发布对象myNumber吗?

3 个答案:

答案 0 :(得分:6)

This link is your bible

[NSNumber numberWithInt:]的情况下,它返回一个自动释放的对象,你不需要做任何事情来正确释放它。当然,除非你retain,否则你可以在release方法上调用dealloc

[[NSNumber alloc] initWithInt:]返回一个保留计数为1的对象(来自alloc)。您负责释放以这种方式创建的任何对象。

答案 1 :(得分:1)

内存管理的简单规则:

  • 使用alloc创建对象时,您有责任释放/自动释放它。
  • 当您保留对象时,您有责任释放/自动释放它。
  • 其他人,如果您释放/自动释放您不拥有的对象,则不是您的责任。崩溃。

答案 2 :(得分:1)

如果您致电allocretainnewcopy(或mutableCopy),则您有责任释放该对象。

在所有其他情况下,对象是自动释放的,不得调用release。

没有强制执行此*的编译器或运行时规则,它只是一种语言命名约定,但它在任何地方都使用,所以你可以指望它是真的。

您自己的代码也应遵循此约定。

*自动引用计数依赖于命名约定来正常运行。有关详细信息,请参阅http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.retained_returns