在我的代码中,我创建了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的数组?
答案 0 :(得分:1)
price0,name0,round0和priceRound0。它们不是使用alloc创建的,而是由返回它们的方法自动释放。
一旦释放了一个不应该的对象,堆就会被破坏,程序可能随时崩溃。
最简单的调试方法是打开僵尸(提示#1):
http://www.loufranco.com/blog/files/debugging-memory-iphone.html