NSArray发布崩溃

时间:2011-01-16 21:09:30

标签: ios4 nsarray

在我的代码中,我创建了5组对象,以及5个包含这些对象的NSArray。在我的方法结束时,两个阵列正确释放,但其他三个阵列使我的应用程序崩溃。

创建

UIImageView *image0 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TankAxe.png"]];  
NSArray *imageArray = [[NSArray alloc] initWithObjects:image0, nil];

NSString *name0 = [NSString stringWithString:@"Pistol"];
NSArray *nameArray = [[NSArray alloc] initWithObjects:name0, nil];

NSNumber *price0 = [NSNumber numberWithInt:100];
NSArray *priceArray = [[NSArray alloc] initWithObjects:price0, nil];

NSNumber *round0 = [NSNumber numberWithInt:0];
NSArray *roundArray = [[NSArray alloc] initWithObjects:round0, nil];

NSNumber *priceRound0 = [NSNumber numberWithInt:0]; 
NSArray *priceRoundArray = [[NSArray alloc] initWithObjects:priceRound0, nil];

释放

[name0 release];
[nameArray release]; //Releases properly

[image0 release];
[imageArray release]; //Releases properly

[price0 release];
NSLog(@"%i",[priceArray retainCount]); //Returns 1
[priceArray release]; //Source of the crash

[round0 release];
[roundArray release]; //Also crashes

[priceRound0 release];
[priceRoundArray release]; //Also Crashes

有谁知道如何正确释放包含NSNumbers的数组?

1 个答案:

答案 0 :(得分:1)

不应该释放

price0,name0,round0和priceRound0。它们不是使用alloc创建的,而是由返回它们的方法自动释放。

一旦释放了一个不应该的对象,堆就会被破坏,程序可能随时崩溃。

最简单的调试方法是打开僵尸(提示#1):

http://www.loufranco.com/blog/files/debugging-memory-iphone.html