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