[英]iPhone memory management
I don't understand this exactly.我不完全明白这一点。
if I write:如果我写:
NSNumber *number = [NSNumber initWithInteger: 5];
do I have to release it?我必须释放它吗?
Is this the same as: NSNumber *number= [NSNumber alloc];这是否与: NSNumber *number= [NSNumber alloc]; 相同
? ?
You wouldn't call NSNumber *number = [NSNumber initWithInteger: 5];
你不会调用NSNumber *number = [NSNumber initWithInteger: 5];
because NSNumber
does not respond to + initWithInteger:
.因为NSNumber
不响应+ initWithInteger:
。 You actually need to call both +alloc
and -initWithInteger:
, like this:您实际上需要同时调用+alloc
和-initWithInteger:
,如下所示:
NSNumber *number = [[NSNumber alloc] initWithInteger:5];
Then you will have to release it later;然后您将不得不稍后发布它; for every alloc call you make, you should also make a call to release.对于您进行的每个 alloc 调用,您还应该调用 release。
Alternatively, you could get an autoreleased NSNumber
using the following class method:或者,您可以使用以下 class 方法获取自动发布的NSNumber
:
NSNumber *number = [NSNumber numberWithInteger:5];
Methods like this return an autoreleased object, which means that you do not need to release it yourself later.像这样的方法返回一个自动释放的 object,这意味着您以后不需要自己释放它。
"The general rule of thumb is: If you alloc, copy, or new, memory management's on you." “一般的经验法则是:如果您分配、复制或新建,memory 管理由您负责。”
I'd add retain to this as well.我也会为此添加保留。
First of all, there is no class method named " +(id)initWithInteger: " in NSNumber class.首先, NSNumber class 中没有名为“ +(id)initWithInteger: ”的 class 方法。 That should be " +(id)numberWithInteger: "那应该是“ +(id)numberWithInteger: ”
You should not release it.你不应该释放它。 Constructors like " [NSNumber numberWith... " are called convenient constructors .像“ [NSNumber numberWith... ”这样的构造函数被称为便捷构造函数。 They return autoreleased objects .它们返回自动释放的对象。 So, you don't have to worry about releasing them.因此,您不必担心释放它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.