2009-08-18 4 views
1

J'ai une méthode distincte pour créer des UITableViewCell sur mesure, est donnée ci-dessouscomment tag se souvient des objets libérés? iPhone

-(UITableViewCell*)getCellContentView:(NSString*)cellIdentifier 
{ 
CGRect photoFrame=CGRectMake(10, 10, 60, 60); 
CGRect label1Frame=CGRectMake(85, 9, 200, 32); 
CGRect label2Frame=CGRectMake(85, 38, 200, 25); 
CGRect labelBgFrame=CGRectMake(0, 0, 320, 80); 

UITableViewCell *cell=[[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 300, 80) reuseIdentifier:cellIdentifier] autorelease]; 


UILabel *tmp; 
tmp=[[UILabel alloc] initWithFrame:label1Frame]; 
tmp.tag=1; 
tmp.textColor=[UIColor blackColor]; 
tmp.font=[UIFont boldSystemFontOfSize:18]; 
tmp.backgroundColor=[UIColor clearColor]; 
[cell.contentView addSubview:tmp]; 
[tmp release]; 
} 

Ici, @ @ tmp est déjà sorti --- » Alors, comment, iPhone se souvient d'avoir publié objet & nous pouvons définir le texte à . cette étiquette

Répondre

2

Je pense que je comprends votre question: vous demandez comment cell.contentView maintient son contenu après l'appel [communiqué tmp], est-ce pas

Si oui, la réponse est que par incréments de addSubview? le nombre de références (comme appeler conserver). Donc, même après avoir appelé [tmp release], tmp a toujours un nombre de références égal à un.

Cela fait un moment que j'ai touché l'iPhone SDK, mais je pense que c'est correct. Corrections bienvenues.

+1

Vous avez raison, Alex. L'objet tmp n'est pas encore libéré, car cell.contentView a un pointeur retenu. sagar, si vous voulez voir le nombre de retenues en action, vous pouvez ajouter la ligne NSLog (@ "retainCount is now% d", [tmp retainCount]); à plusieurs endroits dans votre code. Vous verrez qu'il va de 1 à 2 et redescend à 1 à la toute fin - jamais à 0, ce qui le libérerait réellement. – Tyler

+1

Tyler, merci pour les commentaires. – Alex

Questions connexes