11
votes

Est-ce que SUIVELFROMSUERView publie les objets de ScrollView?

  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?

0 commentaires

4 Réponses :


10
votes

Le nombre de retenties de vos sous-espions est probablement 1. Lorsque vous appelez [version de sousvision]; 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 ) car la sous-SUPVIEW n'est plus là.

Dans ce cas, vous devriez simplement appeler [SUBVIEW SupprimerFROMSUPERView] car supprimerFromsuperView appelle Libération sur la sous-sousview.


0 commentaires

1
votes

Vous devez réviser le Gestion de la mémoire de cacao .

Vous ne relâchez simplement pas de choses que vous n'avez pas explicitement allouées ou conservées vous-même.


0 commentaires

29
votes

@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 sur un objet que vous n'avez pas -Retain explicitement ou implicitement (en appelant l'un des trois mots magiques ). Vous n'appelez pas -Release pour annoncer un objet. Vous l'appelez pour libérer la prise vous 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 appels -Release 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 se soucie.


0 commentaires

-3
votes

Non, ils ne sont pas les mêmes, si vous avez vérifié le

retenirCount

après

SupprimerFromsuperView

Vous verrez que rien n'est changé, vous pouvez donc ajouter la même vue sans l'attribuer !!

plus Vous ne devez jamais libérer un objet que vous n'avez jamais alloué !!


0 commentaires