2010-08-26 11 views
0

Suite à cette question: NSRunLoop is receiving a strange selector; possible race condition tomfoolery? - où il a été découvert qu'un UIGestureRecognizer était désalloué et recevait un message, j'ai imprimé l'adresse d'un de mes RG afin de voir si c'était le un étant rapporté par des zombies. Avec le message d'impression dans le code, je ne peux plus causer le crash que je recherchais à l'origine. Retrait du message d'impression, il semble que je peux le provoquer à nouveau. Comme il s'agit d'un problème de désallocation/conservation/relâchement, quelqu'un peut-il me dire s'il est possible que l'impression de cet objet le fasse référencer, l'épargnant ainsi du désallocation? Et si oui, qu'est-ce que cela me dit au sujet de mon problème original? Trop de versions? Relâchez trop tôt?Est-ce que NSLog'ing quelque chose modifie son nombre de retenues? Parce que je deviens fou maintenant

Répondre

2

Si l'appel à NSLog provient d'un thread d'arrière-plan, cela pourrait bien changer la séquence d'événements. NSLog synchronise les écritures à stderr d'une certaine manière - je ne suis pas sûr exactement comment, mais il n'est pas tiré par les cheveux pour penser qu'une conséquence pourrait être une altération dans la vie de votre objet. En ce qui concerne le problème original, il semble que cela confirme le diagnostic de Dave DeLong: vous essayez d'utiliser un pointeur périmé. Ce qui, à son tour, signifie que le bit de code qui effectue l'appel ne se maintient pas correctement ou qu'un autre bit est en train de se libérer.

+0

Je l'ai corrigé en ne réallouant pas le reconnaissance de geste à chaque fois. Ce n'était pas une bonne idée de toute façon, et il s'avère que l'objet recevant un message post-désallocation était un ancien outil de reconnaissance de gestes que j'avais libéré. Donc je ne sais pas comment ça se passait, mais il est évident que ce n'était pas une bonne chose. Tous triés, merci à tous! – mtrc

1

En 10 ans de développement Mac et iOS, il ne m'est jamais arrivé que NSLog fasse quelque chose de mal pour référencer les comptes. C'est tout ce que je peux dire à coup sûr.