for(UIView *subview in [scrollView subviews]) { NSLog(@"subviews Count=%d",[[scrollView subviews]count]); //[subview release]; [subview removeFromSuperview]; } in the above method if i use [subview removeFromSuperview]; it works fine...but if i use [subview release];It crashes..i want to know that if both are same or is there any difference between them?
4 Réponses :
Le nombre de retenties de vos sous-espions est probablement 1. Lorsque vous appelez Dans ce cas, vous devriez simplement appeler [version de sousvision]; code> Le compte de retenue devient 0 et la sous-vision est libérée de la mémoire. L'accès ultérieur à la sous-espagne (pour appeler
supprimerfromsuperview code>) car la sous-SUPVIEW n'est plus là. P>
[SUBVIEW SupprimerFROMSUPERView] CODE> car
supprimerFromsuperView CODE> appelle
Libération code> sur la sous-sousview. P>
Vous devez réviser le Gestion de la mémoire de cacao . p>
Vous ne relâchez simplement pas de choses que vous n'avez pas explicitement allouées ou conservées vous-même. P>
@Mathieuk est correct, mais il convient de creuser plus profondément dans cela, car c'est un concept très important dans l'Objc. Vous ne devriez jamais appeler -relase code> sur un objet que vous n'avez pas
-Retain code> explicitement ou implicitement (en appelant l'un des trois mots magiques ). Vous n'appelez pas
-Release code> pour annoncer un objet. Vous l'appelez pour libérer la prise vous em> avez mis sur l'objet. Si ScrollView conserve ses sous-espoirs n'est pas votre entreprise (il conserve ses sous-espions, mais ce n'est toujours pas votre entreprise). Si
-removefromsuperview code> appels
-Release code> n'est pas votre entreprise. C'est entre la vision de ScrollView et ses sous-visions. Tout ce qui compte, c'est que vous conservez des objets lorsque vous les souciez d'eux et que vous les libérez lorsque vous arrêtez de vous en occuper et laissez le reste du système à prendre soin de retenir et de libérer ce que il em> se soucie. p>
Non, ils ne sont pas les mêmes, si vous avez vérifié le p>
retenirCount p> blockQuote>
après p>
SupprimerFromsuperView P> blockQuote>
Vous verrez que rien n'est changé, vous pouvez donc ajouter la même vue sans l'attribuer !! p>
plus Vous ne devez jamais libérer un objet que vous n'avez jamais alloué !! p>