Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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_Ipad - Fatal编程技术网

iphone-不泄漏

iphone-不泄漏,iphone,ipad,Iphone,Ipad,正确的方法是什么 我有一个数组,我将在几个方法上使用它。我将向其中添加对象、获取值、替换值等 今天我这样做: 我在.h上声明它,使用类似 NSMutableArray *myArray; myArray = [[[NSArray alloc] init] retain]; 一旦应用程序启动,我就在上声明它 NSMutableArray *myArray; myArray = [[[NSArray alloc] init] retain]; 如果我不添加retain,数组将在某个时候被释放

正确的方法是什么

我有一个数组,我将在几个方法上使用它。我将向其中添加对象、获取值、替换值等

今天我这样做:

我在.h上声明它,使用类似

NSMutableArray *myArray;
myArray = [[[NSArray alloc] init] retain];
一旦应用程序启动,我就在上声明它

NSMutableArray *myArray;
myArray = [[[NSArray alloc] init] retain];
如果我不添加retain,数组将在某个时候被释放,应用程序将崩溃。但在应用程序开始时分配阵列并让它“打开”,而不释放它会让仪器哭泣,将手指指向我,称我为“泄密者”

如何解决这个问题?这是正确的方法吗?你们是怎么做这种事的


谢谢

alloc
隐式地将保留计数设置为1。通过发送
retain
消息,您将retain计数增加到2。为了释放对象,您需要释放它两次。否则将导致内存泄漏

理想情况下,您应该使用
[[NSArray alloc]init]
init
方法中创建对象,然后在
dealloc
方法中释放它,如下所示:

- (void)dealloc {
    [myArray release];
    [super dealloc];
}
您可能还发现本文很有用:


还有一件事:您将myArray声明为
NSMutableArray
,但将其实例化为
NSArray
。可能是这导致了崩溃。

alloc
隐式地将保留计数设置为1。通过发送
retain
消息,您将retain计数增加到2。为了释放对象,您需要释放它两次。否则将导致内存泄漏

理想情况下,您应该使用
[[NSArray alloc]init]
init
方法中创建对象,然后在
dealloc
方法中释放它,如下所示:

- (void)dealloc {
    [myArray release];
    [super dealloc];
}
您可能还发现本文很有用:


还有一件事:您将myArray声明为
NSMutableArray
,但将其实例化为
NSArray
。可能是这导致了崩溃。

您不应该保留刚刚创建的对象。你已经拥有它了。如果,如您所说,“数组将在某个时刻被释放,应用程序将崩溃”,那么您应该更改这段代码。您的代码不应该释放您仍然想要保留的对象。

您不应该保留刚刚创建的对象。你已经拥有它了。如果,如您所说,“数组将在某个时刻被释放,应用程序将崩溃”,那么您应该更改这段代码。你的代码不应该释放你仍然想保留的对象。

谢谢,但请告诉我:我在应用程序开始时声明数组并在dealloc方法上释放它,这是不是犯了异端?我怎么能不用?如果不这样做,数组将无效,应用程序将崩溃。我已尝试删除retain,但应用程序崩溃。您必须在代码的其他地方释放它。请确保您的代码中唯一的
[myArray release]
实例是在您的
dealloc
方法中。谢谢,但请告诉我:我在应用程序开始时声明数组并在dealloc方法中发布它,这是不是犯了异端?我怎么能不用?如果不这样做,数组将无效,应用程序将崩溃。我已尝试删除retain,但应用程序崩溃。您必须在代码的其他地方释放它。确保代码中的
[myArray release]
的唯一实例在
dealloc
方法中。