简体   繁体   English

iPhone memory 管理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM