Reader occasionnel et preuve d'abord Asker, alors s'il vous plaît soyez doux :)
Je crée un objet géré fort> (compte> (compte), qui est transmis dans un contrôleur de vue enfant où son être défini dans une propriété retenue. p> l'interface de contrôleur d'affichage: p> donc dans le code exemple 1 que j'ai libéré l'objet de compte parce que je ne suis plus intéressé à cela dans cette méthode. Comme il est retenu par la Cependant, quand Je vais supprimer l'objet de après de nombreux débogage et cheveux tirant i Découvert que si je ne relâche pas compte dans Mise à jour pour répondre à la question de Kevin em> strong> p> Le code pour supprimer l'objet de la ManagedObjectContext strong> est dans la racine racine (qui maintient le contrôleur enfant) p>
3 Réponses :
Premièrement: cela ressemble à un bug sur la partie d'Apple. Les données de base appellent Il pourrait y avoir une libération supplémentaire flottant autour d'un endroit qui est "équilibré" lorsque vous supprimez l'appel sur "Les instruments ne montrent pas de fuites" ne veut pas dire qu'il n'y en a pas; Enfin, j'ai vérifié que cela a été confondu par des cycles (c'est-à-dire que cela ne montrerait pas une fuite si vous avez oublié de non définir Iboutlets dans DealLoc). J'ai testé avec Si vous pensez que c'est un problème de conserver / de libération, je les ai débrouillis une fois en les qualifiant de retenue / de libération / autorelease pour appeler NSLog. J'ai ensuite ajouté des points d'arrêt sur chacun d'eux, définissez-les pour exécuter la commande "BT", puis sur l'autocontinue. Ensuite, courez la chose qui se brise (dans mon cas, je pense que ce n'était qu'un retenue supplémentaire), imprimez la sortie du journal, collez-la sur un tableau blanc et passez une demi-heure correspondant à des conserve et de la sortie. P> _unwind_resume code>, qui est (probablement) une sorte d'exception se dérouler. Exception - Un détendeur existe sur le téléphone, mais (je pense) utilise le bras abi, qui utilise les noms de fonction commençant par
__ cxa _ code>. Exécutez-vous sur le simulateur? Quelle version du SDK? P>
[version de compte]; P>. P>.
nsmutabletata * d = [nsmutabledata DatawithlengthL: 1 << 20]; memcpy (d.mutablebytes, & d, 4); code>, mais un test plus facile est juste
[[UIView Alloc] InitwithFrame: CGRectZero] Code>. P>.
En effet, retirer le [version de compte]; code> à la fin du premier bloc signifie que le
retenir code> libérer code> Dans
addaccountviewController code > sont correctement équilibrés et l'application ne s'accumule pas lors de l'enregistrement après avoir supprimé une entrée du
gantedObjectContext code>. En ce qui concerne la première partie, j'exécutais le code sur le simulateur et l'appareil et obtenez cette erreur. Le SDK était de 4,1 gm.
Si vous retirez [version de compte]; code> comme décrit le corrigez, addaccountviewController est cassé (en ce qui concerne les conventions de gestion de la mémoire OBJ-C). Il n'est pas facile de déterminer où il est cassé sans regarder tout le code Inside AddaccountviewController qui touche la propriété Anabount ou sa variable d'instance de support. (En outre, les propriétés de préfixation / ivars avec "A" ou "an" ne sont pas dans une convention de codage que je connaisse et contredit les endroits où Apple l'utilise.)
Lorsque vous supprimez tout GestionedObject, le système publiera automatiquement toutes les références relatives à cet objet. Donc, il n'y a pas besoin d'objet résident de manière programmatique. Une fois que vous avez supprimé l'objet, vous ne pouvez pas accéder à cet objet dans la classe mère. P>
Ce n'est pas vrai. Lorsqu'un objet géré est supprimé, il est marqué pour la suppression, mais il ne peut pas libérer la mémoire puisqu'elle enfreint la politique de gestion de la mémoire Apple.
J'étudie que NsmanieDObjectContext Classe, j'ai constaté que lorsque la méthode DELLETEOBJECT est appelée, l'objet sera supprimé des tables uniques.
J'ai eu un problème similaire se terminant dans un "J'ai détecté une tentative d'appeler un symbole dans les bibliothèques système qui n'est pas présente sur l'iPhone: _Unwind_Resume appelé de la fonction _pffaultandlerlookpow à l'image Coredata. " Message d'erreur. P>
Mon problème était une erreur "cascade" suppression de la délétion-règle sur une relation dans le modèle. Avec cette règle, mon objet géré supérieur a été supprimé mais toujours référencé dans le code. Après avoir défini la "règle de suppression" sur cette relation sur "Nulify", tout a fonctionné comme conçu. P>
-> Pas de problème de données de base ... problème de conception! p>
Johnny P>
Pouvez-vous montrer le code qui le supprime du nsmanagedObjectContext? Et cela se produit-il à l'intérieur de AddaccountviewController ou ailleurs?
EnfantController.AncAccount = compte; code> Cette ligne ne conserve pas
compte code>. Il la copie à
anaccount code>. Cela ne conserve pas du tout +1 son conserver, et vous ne serez à relâcher que
anaccount code> dans
addaccountviewController code> SPELLOC.
@THOMAS:
@property (nonatomic, conserver) compte * anocount; code> Pourquoi ne conserverait-il pas?
Thomas, ça ne conserve pas? C'est un ensemble synthétisé pour la propriété qui est déclaré comme
retenir code> pas
copier code>.
Enregistrez-vous le contexte de l'objet après la création de l'objet Compte?
Tarasis, quel est le backtrage dans l'accident? Est-ce que cela se produit comme un résultat direct de l'appel à
-DeleeObject: code> ou est-ce qu'il se passe ailleurs?
Kevin La sortie de la console est aussi au-dessus de la backtrage provient du journaliste et est ici: Pastie.org/1153505 . Ajout également une trace NSLog directement après l'appel code> deleteObject: code> Sortie mais Trace I ajouté après la
Enregistrer: code> objet si le bloc n'est pas une sortie.
Un dernier point de données. Si j'exécute l'application, ajoutez un élément à la liste, quittez l'application, redémarrez l'application et supprimez l'objet Ajout. Il est supprimé et économisez bien. Si je ajoute cependant un autre objet et supprimez-le, l'application se bloque à nouveau comme ci-dessus. C'est ce qui m'a amené à me demander la libération dans l'AddaccountviewController.
@Puetras ... qui conserve
anaccount code> n'est-ce pas? Pas
compte code> ... Le @property conserve simplement la variable de réglage. Pour libérer, vous feriez
[annonction version] code> pas
[version de compte] code>
Fair Thomas, semble que nous n'avons pas vu / comprendre ce que vous avez souligné. Votre droit, ce n'était pas un retenue supplémentaire et il a été mal libéré de manière incorrecte à la fin du premier échantillon de code. Nous avons été confus parce que vous aviez parlé de la copie trop
anaccount code>.
Merci à tous pour votre contribution.