在 Objective-C 2.0编程一书的第326页上,作者说:
myNumber = [[NSNumber alloc] initWithInt: 1000];
当然,根据之前的讨论,如果您以这种方式创建
myNumber
,那么当您使用以下语句完成后,您有责任随后将其发布:
[myNumber release];
我的问题是:
这是否意味着如果我使用此语句创建NSNumber
对象
NSNumber *myNumber = [NSNumber numberWithInteger: 100];
我不必自己发布对象myNumber
吗?
答案 0 :(得分:6)
在[NSNumber numberWithInt:]
的情况下,它返回一个自动释放的对象,你不需要做任何事情来正确释放它。当然,除非你retain
,否则你可以在release
方法上调用dealloc
。
[[NSNumber alloc] initWithInt:]
返回一个保留计数为1的对象(来自alloc
)。您负责释放以这种方式创建的任何对象。
答案 1 :(得分:1)
内存管理的简单规则:
答案 2 :(得分:1)
如果您致电alloc
,retain
,new
,copy
(或mutableCopy
),则您有责任释放该对象。
在所有其他情况下,对象是自动释放的,不得调用release。
没有强制执行此*的编译器或运行时规则,它只是一种语言命名约定,但它在任何地方都使用,所以你可以指望它是真的。
您自己的代码也应遵循此约定。
*自动引用计数依赖于命名约定来正常运行。有关详细信息,请参阅http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.retained_returns。