2013-02-28 2 views
1

Quand j'appelle initWithTimeInterval:sinceDate: commeFuite de mémoire en appelant initWithTimeInterval: sinceDate d'iOS sur ARC

NSDate * newDate = [date initWithTimeInterval:-7*24*60*60 sinceDate:date]; 

Je reçois une fuite de mémoire. Quand je le répare comme:

NSDate * newDate = [[NSDate alloc] initWithTimeInterval:-7*24*60*60 sinceDate:date]; 

Je pense qu'aucune fuite de mémoire ne s'est produite. Ma question est pourquoi la description précédente provoque une fuite de mémoire. Est-ce qu'il contient une référence forte? Ou changer le nombre de références?

+0

Question intéressante - J'ai modifié un peu votre article et j'espère que cela le rendra plus clair. Si j'ai quelque chose de mal, faites le moi savoir. –

+0

Merci, c'est ce que je veux dire. Maintenant, je vérifie les fuites de mémoire avec des instruments. Il semble que l'événement de conservation supplémentaire existe. – chabashilah

Répondre

0

Pourriez-vous afficher plus de code? Comment commencez-vous dans le premier exemple? initWithTimeInterval:sinceDate: est un constructeur, donc si vous avez déjà initialisé des données, vous ne devez pas appeler à nouveau une méthode init... pour cette variable.

+0

Merci pour votre commentaire. Ce code est juste un exemple mais je présume que 'date' est initialisé par quelque chose comme' init ... '. Alors pensez-vous que je devrais utiliser 'dateWithTimeInterval: sinceDate:' au lieu de 'initWithTimeInterval: sinceDate:'? – chabashilah

+0

@chabashilah, vous devez absolument utiliser 'dateWithTimeInterval: sinceData:'. –

+0

Merci! Je le ferai. – chabashilah