8
votes

IOS 6.1 avec la classe Arc de XIB ne doit pas être traité, Uiclasswapper

avoir un problème intéressant dans lequel il existe une classe qui est référencée dans une mise en page XIB (sous-classe d'Uiscrollview) et n'est pas désaffectée selon les instruments / allocations et ne se casse pas dans sa routine de transloc. Appliquez-le SClass1.

Il y a une classe d'utilisation (appelons-la uclass) qui a le fichier XIB et la sortie. xxx

Ceci est accroché correctement à la XIB mise en page de fichier.

sclass1 est une propriété allouée lorsque le XIB pour UCLASS est chargé. Uclass est servi de dialoguité puis recréé de temps en temps et nous avons donc un autre exemple de sclass1, mais Sclass1 ne s'en va jamais et ne peut jamais trouver une autre référence à elle.

forer dans les instruments montre celui d'un malloc Et c'est tout.

fyi, la classe commence avec xxx


0 commentaires

4 Réponses :


0
votes

Je pense que votre @property devrait être fort pour une classe: xxx

car fort est l'équivalent à conserver et ARC gérera la version pour vous.

Vous aurez plus d'informations avec la documentation Apple sur Transition sur les notes de version arc dans la section sur attributs de propriété .


1 commentaires

C'est la bonne réponse, tout ce qui est une iboutlet doit être faible, la vue ne se fait pas de relâcher car le contrôleur a un point de conservation de la prise et la sortie a une référence au contrôleur. Créer un cycle de retenue. Avoir une uppote.



5
votes

Si un objet ne doit pas être distribué sous arc, cela signifie une référence forte à celle-ci. Étant donné que votre propriété est faible l'objet doit être étroitement détenu par quelque chose d'autre que l'objet Uclass (sinon, il serait distribué immédiatement après la charge XIB). Dans le code que vous avez fourni, il n'est pas clair de ce que le vif propriétaire de cet objet est, mais je suppose que cela pourrait être un (ou plus) des éléments suivants:

  1. Étant donné que la classe de l'objet est une sous-classe uiview , elle peut être (fortement) référencée par son superview si elle est ajoutée sous l'un des Sous-visVIEWS . Cela se produit automatiquement lorsqu'un fichier XIB est chargé. Si le superview ne doit pas être distribué non plus le sclass . Vous pouvez supprimer cette propriété en appelant supprimerfromsuperview
  2. Un vélo de propriété fort (le cycle de conserver) existe quelque part entre les ivars de l'objet sclass1 (c'est-à-dire que l'une des variables d'instance à part entière a une référence forte à son propriétaire - le Sclass1 ). Méfiez-vous que tout bloc utilisant auto maintient directement une référence forte. Avoir une référence forte au bloc, conduit souvent souvent à un cycle de conservation. Enregistrer auto à un __ faible var et transmettez-le sur le bloc que si vous avez une bonne raison de ne pas le faire.
  3. une référence forte créée manuellement existe par ex. Ajout de l'objet à un conteneur ou enregistrer le pointeur sur un non- __ faible variable.

    Essayez de trouver et de supprimer ces principaux propriétaires. Seulement après que tous sont supprimés, l'objet peut être distribué.


0 commentaires

1
votes

Étant donné que votre propriété est faible et que ce n'est toujours pas distribué, recherchez de fortes références à la décoration ou à son propriétaire, UCLASS. Peut-être que vous utilisez directement de l'UCLASS (ou SCLASS), sans __wak de type de type de taille (auto) danse et ce bloc crée de conserver le cycle. Surveillez également les relations parents-enfants et les délégués. Peut-être qu'il y a délégué qui est fort au lieu de faibles ou deux contrôleurs tiennent de fortes références à chaque fois.

En outre, si vous souhaitez avoir des réponses plus détaillées, veuillez publier un code plus pertinent.


1 commentaires

Merci d'avoir souligné le cycle de conservation induite par le bloc. C'est en effet une affaire commune imo. Ajouté que à ma réponse aussi.



0
votes

J'ai récemment eu les mêmes symptômes - de le résoudre dans mon cas, mon objet agissait en tant que délégué pour un certain nombre d'autres objets, a donc dû libérer l'objet de toutes ses responsabilités déléguées avant qu'elle n'appellerait


0 commentaires