2010-09-23 10 views
0
  • J'ai une minuterie générale avec un intervalle de 1,5 seconde (le cycle de rendu).
  • J'ai une classe avec un membre/propriété NSDate * (nonatomic, retain).
  • J'ai défini cette date en appelant [callingClass setDate: expirationDate];

Maintenant ... quelques cycles de rendu cette NSDate est valide. Cependant, autour du 3ème cycle, la valeur de cette variable est corrompue, semble-t-il.NSDate * est corrompu après quelques cycles de rendu. Pourquoi?

Lorsque je définis un point de rupture, je remarque que je peux passer la souris et voir les données affichées correctement (quand c'est valide). Mais quand il est invalide je vois soit "hors de portée", soit des chaînes étranges (ressemble un peu à des noms de bibliothèques ou quelque chose), ou rarement le débogueur ne me montre la valeur de n'importe quelle variable (je déteste le débogage dans xcode).

C'est pourquoi je pense que cette variable est en quelque sorte corrompue. Devrais-je définir cette propriété synthétisée comme (nonatomic, retain)? Ou devrait-il être déclaré comme quelque chose d'autre?

+0

On dirait que je l'ai trouvé le problème. MAIS, je ne sais pas pourquoi cela fait une différence! Avant, je fixais ma date en appelant le setter set set (qui était défini comme (non atomic, retain)). Puis j'ai changé la propriété pour être (nonatomic, copie) et changé l'assignation de propriété elle-même pour être, [callingClass setDate: [expirationDate retain]]. Ma seule supposition est que dans le setter la mémoire a été libérée automatiquement dans ce court laps de temps entre le "release" et l '"assignation" du setter de la propriété !! Si c'est le cas, alors putain, ça me fait peur car j'ai besoin d'être très prudent maintenant! – AlvinfromDiaspar

+1

Sans code cela semble insoluble. – Eiko

+0

Si vous avez une propriété copy, l'appel de '[callingClass setDate: [expirationDate retain]]' entraînera une fuite de mémoire. – mipadi

Répondre

0

Je pense avoir trouvé le problème. J'ai une méthode appelée: - (NSDate*) getNSDateFromString:(NSString*)stringDate;

Quand j'ai appelé ce que je faisais NSDate * date = [auto getNSDateFromString: expirationString]; Cela provoquait le comportement que j'ai décrit ci-dessus.

Puis je l'ai changé à la suite qui a éliminé les Crashings:

NSDate *date = [[self getNSDateFromString:expirationString] retain]; // do something with the date here... [data release];