2010-09-15 4 views
2

J'ai tiré mes cheveux sur ce problème, j'ai lu tous les post sur le problème de désallocation mais je ne pouvais pas comprendre pourquoi, parce que je suis assez nouveau avec objectif-c et iphone, comme vous pouvez le dire:)UIImage deallocate problème

mais ce que je ne comprends pas est ce bloc de code ci-dessous en disant que je suis trop dEALLOCATED UIImage, tout maintenant je l'ai essayé, mais l'application se bloque toujours

UIImage *imageSave  = [UIImage imageNamed:@"btn_save.png"]; 
UIButton *btnSave  = [UIButton buttonWithType:UIButtonTypeCustom]; 

[btnSave setBackgroundImage:imageSave forState:UIControlStateNormal]; 

btnSave.frame = CGRectMake(0, 0, imageSave.size.width, imageSave.size.height); 

[btnSave addTarget:self action:@selector(save) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *barBtnSave = [[UIBarButtonItem alloc] initWithCustomView:btnSave]; 

self.navigationItem.rightBarButtonItem = barBtnSave; 

//[imageSave release]; 
//[btnSave release]; 
[barBtnSave release]; 


UIImage *imageCancel = [UIImage imageNamed:@"btn_cancel.png"]; 
UIButton *btnCancel  = [UIButton buttonWithType:UIButtonTypeCustom]; 

[btnCancel setBackgroundImage:imageCancel forState:UIControlStateNormal]; 

btnCancel.frame = CGRectMake(0, 0, imageCancel.size.width, imageCancel.size.height); 

[btnCancel addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *barBtnCancel = [[UIBarButtonItem alloc] initWithCustomView:btnCancel]; 

self.navigationItem.leftBarButtonItem = barBtnCancel; 

//[imageCancel release]; 
//[btnCancel release]; 
[barBtnCancel release]; 
+0

Même avec les commentaires des appels à « libérer » que vous avez un problème? Ou essayez-vous de comprendre pourquoi vous avez dû les commenter? – imaginaryboy

Répondre

1

Ok, nous allons jeter un oeil à ces 2 lignes:

UIImage *imageCancel = [UIImage imageNamed:@"btn_cancel.png"]; 

[imageCancel release]; 

En ligne 1, vous créez un autorelease image, puis la retainCount serait 0. Ensuite, vous relâchez l'image, ce qui rendrait le retainCount est -1, ce qui provoque le crash

Ce que vous devez retenir est une liste d'augmenter votre retainCount: alloc, copy, retain ... Si vous appelez une de ces méthodes à un objet, vous devez faire soit: autorelease ou release

+0

merci va essayer que – badcoder