Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 释放使用initWithInteger:vs.numberWithInt创建的NSNumber实例:_Objective C_Cocoa_Memory Management - Fatal编程技术网

Objective c 释放使用initWithInteger:vs.numberWithInt创建的NSNumber实例:

Objective c 释放使用initWithInteger:vs.numberWithInt创建的NSNumber实例:,objective-c,cocoa,memory-management,Objective C,Cocoa,Memory Management,在《Objective-C2.0编程》一书的第326页,作者说: myNumber = [[NSNumber alloc] initWithInt: 1000]; 当然,根据之前的讨论,如果您以这种方式创建myNumber,那么您有责任在使用完myNumber后发布它,并声明如下: 我的问题是: 这是否意味着如果我使用此语句创建NSNumber对象 NSNumber *myNumber = [NSNumber numberWithInteger: 100]; 我不必自己释放对象myN

在《Objective-C2.0编程》一书的第326页,作者说:

myNumber = [[NSNumber alloc] initWithInt: 1000];  
当然,根据之前的讨论,如果您以这种方式创建myNumber,那么您有责任在使用完myNumber后发布它,并声明如下:

我的问题是:

这是否意味着如果我使用此语句创建NSNumber对象

NSNumber *myNumber = [NSNumber numberWithInteger: 100];  
我不必自己释放对象myNumber

在[NSNumber numberWithInt:]的情况下,它返回一个自动释放的对象,您不需要做任何事情来正确释放它。当然,除非您保留它,否则在这种情况下您将调用release,很可能是通过dealloc方法

[[NSNumber alloc]initWithInt:]通过调用alloc返回保留计数为1的对象。您负责释放以这种方式创建的任何对象

在[NSNumber numberWithInt:]的情况下,它返回一个自动释放的对象,您不需要做任何事情来正确释放它。当然,除非您保留它,否则在这种情况下您将调用release,很可能是通过dealloc方法


[[NSNumber alloc]initWithInt:]通过调用alloc返回保留计数为1的对象。您负责释放以这种方式创建的任何对象。

内存管理的简单规则:

使用alloc创建对象时,您有责任释放/自动释放它。 当您保留一个对象时,您有责任释放/自动释放它。 其他人,这不是你的责任,如果你释放/自动释放你不拥有的对象,崩溃。
内存管理的简单规则:

使用alloc创建对象时,您有责任释放/自动释放它。 当您保留一个对象时,您有责任释放/自动释放它。 其他人,这不是你的责任,如果你释放/自动释放你不拥有的对象,崩溃。 如果调用alloc、retain、new、copy或mutableCopy,则负责释放该对象

在所有其他情况下,对象是自动释放的,不能调用release

没有编译器或运行时规则强制执行此*,它只是一种语言命名约定,但它在任何地方都被使用,所以您可以相信它是正确的

您自己的代码也应该遵循此约定

*自动引用计数依赖于命名约定才能正常工作。有关详细信息,请参阅。

如果调用alloc、retain、new、copy或mutableCopy,则您负责释放该对象

在所有其他情况下,对象是自动释放的,不能调用release

没有编译器或运行时规则强制执行此*,它只是一种语言命名约定,但它在任何地方都被使用,所以您可以相信它是正确的

您自己的代码也应该遵循此约定


*自动引用计数依赖于命名约定才能正常工作。有关详细信息,请参阅。

该约定适用于alloc,而不是init。导致您拥有内存的方法有NARC-new、alloc、retain、copy……数字加@怎么样,比如@10和@id.intvalues?约定是针对alloc,而不是init。让你拥有记忆的方法有NARC-new、alloc、retain、copy……数字加@怎么样,比如@10和@id.INTVALUE总是比自己重述更好。例如,您遗漏了copy、new和包含mutableCopy等词的方法。与自己尝试重述这些词相比,最好是指导他人。例如,您遗漏了copy、new和包含诸如mutableCopy等词的方法。
NSNumber *myNumber = [NSNumber numberWithInteger: 100];