10
votes

IOS 4.3 Fuite de Tintcolor de la barre d'Uinavigation

dans iOS4.3 Si je définis

- (void)viewWillAppear:(BOOL)animated {
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.9 green:0 blue:0 alpha:0];
        [super viewWillAppear:animated];
    } 


1 commentaires

Merci de confirmer que ce n'était pas seulement moi. Utilisez cela pour les âges et n'avez jamais eu de problème. Étrange comment cela ne se produit que parfois.


5 Réponses :


0
votes

Essayez d'utiliser Construire et analyser (ou analysez-le dans XCode 4) et assurez-vous que vous n'êtes pas fuir ailleurs.) Si vous voyez toujours le problème, déposez un rapport de bogue avec Apple.


1 commentaires

Ceci est vraiment câblé. J'utilise le même code exécuté dans les instruments sur iOS4.2 et iOS4.3, iOS4.2 n'a pas ce problème



1
votes

Tout d'abord, n'utilisez pas retensipeCount . Il est inutile.

Suivant, comment savez-vous que vous avez une fuite? Avez-vous utilisé des instruments? Enfin, avez-vous activé le suivi des événements dans l'instrument d'allocations et voyez où tous les retenues / rejets sont envoyés?

+ blackcolor est un singleton. Ainsi, vous allez probablement la fuite, mais il n'y a qu'une seule et des fuites ne le trouvera pas car elle est référencée par un global.

Quant à votre fuite, peu importe que cela ne se produise que dans iOS 4.3 vs.2 4.2. Une fuite est une fuite. Bien qu'il y ait une chance dans les cadres Apple, ce n'est pas probable. Cependant, dans l'affirmative, un rapport de bogue est très apprécié.

En outre, utilisez l'instrument d'allocations pour voir si vous accumulez d'autres objets qui ne figurent pas comme des fuites (mais ne devraient toujours pas être autour). Les fuites ne détecte que des objets non référencables, mais il existe de nombreuses autres façons de fuir la mémoire!


2 commentaires

J'ai utilisé des instruments pour surveiller la fuite et les allocateurs. Je trouve le nombre d'objets CGColor à continuer d'augmenter si j'utilise navigationbar.tintcolor = [couleur-uicolor Colorwithred: 0,0 vert: 0,0 bleu: 0.0 alpha: 1] dans la viewwillappear. La fuite n'arrive que dans iOS4.3


Merci beaucoup pour votre aide. Je l'ai déjà signalé à Apple. Je viens de modifier la question, ajoutant du code. Pourriez-vous créer un projet vraiment simple qui ont deux écran: racineviewController et détaillantViewController. Et définissez le teintcolor dans la vueWillappear dans chaque mode de vue. Vous pouvez voir la fuite dans les instruments. Vraiment apprécier votre aide.



0
votes

Je peux confirmer la même fuite dans mon code - aucune fuite signalée dans 4.2 et la fuite apparaît dans 4.3


0 commentaires

2
votes

Je vois aussi le même problème. J'ai déposé un bug avec Apple et je posterai des mises à jour lorsque je les entends.

J'ai trouvé une solution de contournement. Le problème est d'appeler autoavigationcontroller.navigationbar.tintcolor. Mais si vous définissez la couleur de la teinte pour un différent em> uiviewcontroller, vous n'aurez pas le même problème. Par exemple, cela ne semble pas fuir: p>

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
    detailViewController.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}


0 commentaires

3
votes

ive a eu cette question avant 4.2, je pense que Colourwithred: Green: Blue attribue un nouvel objet UICOLOR que votre responsable de la gestion.

La solution consiste à créer une instance pour votre couleur de teinte et de le libérer lorsque vous avez terminé avec votre Contrôleur de navigation dans la vue ViewDiduLload. P>

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    tintBarColor = [UIColor   
                colorWithRed:50.0/255   
                green:134.0/255   
                blue:187.0/255   
                alpha:1];
    self.navigationController.navigationBar.tintColor = tintBarColor;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    [tintBarColor release];
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on     demand.
    // For example: self.myOutlet = nil;
}


0 commentaires