J'ai un problème avec la libération d'une vue trop de fois. Bien que simple en théorie parce que je suis en train de me déplacer, ce qui est une sous-classe d'uiview et d'être animé et ainsi de suite, ce n'est pas quelque chose que je peux facilement corriger. Il se bloque seulement 10% et seulement dans certaines conditions et seulement 30% du temps même dans ces conditions.Libérer un objet en raison du nombre de retenues
Donc en d'autres termes c'est un peu complexe. Parfois, dans ma méthode dealloc, le nombre de retain de cet UIView est déjà 1 (qui est libéré lorsque la vue est libérée) et ne devrait donc pas être libéré à nouveau. Donc ce que je l'ai fait est la suivante:
if ([mainView retainCount] > 1) {
NSLog(@"released");
[mainView release];
}
Consistant avec les accidents libérés est généralement appelé, mais pas toujours et il arrive à peu près quand je me attends parfois de tomber en panne. J'ai vérifié les fuites avec ce code et il ne fuit jamais.
Maintenant la vraie question ... Est-ce mal de libérer quelque chose en raison de son nombre de retenue? J'ai essayé de nombreuses façons de résoudre ce problème et jusqu'à présent, c'est le seul qui soit fiable et qui ne fuit pas.
EDIT: Si non, alors quelle est la meilleure façon de copier un UIView dans un autre UIView?
mainView = newView;
[newView release];
J'ai essayé de libérer la mainView d'abord, puis d'appeler la copie sur newView, mais cela se bloque. Ce qui précède fonctionne aussi parfaitement, sauf que le nombre de retenues est parfois inférieur à 1 attendu, même s'il n'est jamais sorti ailleurs dans le code.
a mis à jour la question – Rudiger
Vous devez afficher plus de code, et dites-nous ce que vous voulez vraiment faire. Copier une vue est en quelque sorte vague. – Eiko
Il n'y a pas beaucoup plus. Il y a deux UIViews complexes, si j'ai besoin de créer une nouvelle vue complexe, je crée une UIView locale, crée le contenu de l'UIView, animée entre eux, obtiens mainView = newView puis libère newView. – Rudiger