Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone内存管理_Iphone_Objective C_Ios_Memory - Fatal编程技术网

iPhone内存管理

iPhone内存管理,iphone,objective-c,ios,memory,Iphone,Objective C,Ios,Memory,我不太明白这一点 如果我写: NSNumber *number = [NSNumber initWithInteger: 5]; 我必须释放它吗 这是否等同于: NSNumber*number=[NSNumber alloc] ? 您不会调用NSNumber*number=[NSNumber initWithInteger:5]

我不太明白这一点

如果我写:

NSNumber *number = [NSNumber initWithInteger: 5];
我必须释放它吗

这是否等同于: NSNumber*number=[NSNumber alloc]


?

您不会调用
NSNumber*number=[NSNumber initWithInteger:5]NSNumber
不响应
+initWithInteger:
。实际上,您需要同时调用
+alloc
-initWithInteger:
,如下所示:

NSNumber *number = [[NSNumber alloc] initWithInteger:5];
然后你必须在以后发布它;对于您发出的每一个alloc调用,您还应该发出一个release调用


或者,您可以使用以下类方法获取自动释放的
NSNumber

NSNumber *number = [NSNumber numberWithInteger:5];

像这样的方法返回一个自动释放的对象,这意味着您以后不需要自己释放它。

您不会调用
NSNumber*number=[NSNumber initWithInteger:5]NSNumber
不响应
+initWithInteger:
。实际上,您需要同时调用
+alloc
-initWithInteger:
,如下所示:

NSNumber *number = [[NSNumber alloc] initWithInteger:5];
然后你必须在以后发布它;对于您发出的每一个alloc调用,您还应该发出一个release调用


或者,您可以使用以下类方法获取自动释放的
NSNumber

NSNumber *number = [NSNumber numberWithInteger:5];

像这样的方法返回一个自动释放的对象,这意味着您以后不需要自己释放它。

首先,在NSNumber类中没有名为“+(id)initWithInteger:”的类方法。应该是“+(id)numberWithInteger:”


你不应该释放它。像“[NSNumber numberWith…”这样的构造函数被称为方便的构造函数。它们返回自动释放的对象。因此,您不必担心释放它们。

首先,在NSNumber类中没有名为“+(id)initWithInteger:”的类方法。这应该是“+(id)numberWithInteger:”

您不应该释放它。像“[NSNumber numberWith…”这样的构造函数称为方便的构造函数。它们返回自动释放的对象。因此,您不必担心释放它们。

“一般的经验法则是:如果您分配、复制或新建,则内存管理由您决定。”

我还要加上retain。

一般的经验法则是:如果您分配、复制或新建,内存管理由您自己负责


我还要加上retain。

。如果你还没有,你必须读它。如果你还没有,你必须读它。+1,确实没有这样的方法。另一种方法是:
[[NSNumber numberwhithinteger:5]retain];
如果我只输入NSInteger*integer=5,我必须释放它吗?@Wikiboo
NSInteger
只是一个简单的旧类型(类似于
int
float
double
char
)。它不是一个类。它也不是
NSNumber
的子类。而且
NSInteger*integer=5;
是错误的:你给指针分配了一个常量,除了
NULL
nil
nil
(去掉星号,您就没事了)。不,您永远不应该释放或释放POD(普通的旧类型),因为它们是由编译器预先分配的,而不是在运行时。@Wikiboo-NSUInteger是一种基本类型,没有内存管理,但您应该命名您的var..1,实际上没有这样的方法。另一种方法是:
[[NSNumber numberWithInteger:5]retain]如果我只输入NSInteger*integer=5,我必须释放它吗?@Wikiboo
NSInteger
只是一个普通的旧类型(类似于
int
float
double
char
)。它不是一个类。它也不是
NSNumber
的子类。而且
NSInteger*integer=5;
是错误的:你给指针分配了一个常量,除了
NULL
nil
nil
(去掉星号,你就没事了)。不,你不应该释放或释放一个POD(普通的旧类型),因为它们是由编译器预先分配的,而不是在运行时。@Wikiboo-NSUInteger是一个基本类型,没有内存管理,但您应该命名您的变量…小心,他在写“initWithInteger”上帝!我没有注意到。谢谢;-)小心,他在写“initWithInteger”上帝!我没有注意到。谢谢;-)