2011-01-16 9 views
1

In meinem Code erstelle ich 5 Sätze von Objekten und 5 NSArrays, die diese Objekte enthalten. Am Ende meiner Methode werden zwei der Arrays ordnungsgemäß freigegeben, aber die anderen drei führen zum Absturz meiner Anwendung.NSArray Release Absturz

Erstellen

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]; 

Releasing

[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 

Jeder weiß, wie richtig die Arrays enthalten NSNumbers freizugeben?

+0

Beachten Sie, dass retainCount nie 0. Einer der vielen Gründe, warum Sie nie diese Methode zurückkehren können anrufen sollte. – bbum

+0

Eigentlich stürzt die App ab, wenn der Retain-Count 0 ist und die Methode aufgerufen wird, also hilft es beim Debuggen, die Methode aufzurufen. –

Antwort

1

price0, name0, round0 und priceRound0 sollten nicht freigegeben werden. Sie wurden nicht mit alloc erstellt und werden von den Methoden, die sie zurückgaben, automatisch freigegeben.

Sobald Sie ein Objekt freigeben, das Sie nicht sollten, ist der Heap beschädigt und das Programm kann jederzeit abstürzen.

Der einfachste Weg, dies zu debuggen ist auf Zombies (Tipp # 1) drehen:

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

+0

Danke. Du hast mich gerettet. –

Verwandte Themen