2012-12-01 2 views
2

Disons que j'ai ce code:Est-ce que les méthodes qui retournent des pointeurs sur différents objets allouent et initent automatiquement cet autre objet?

NSString *inspDate = @"20120515"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyyMMdd"]; 
NSDate *inspectionDate; 
inspectionDate = [dateFormatter dateFromString:inspDate]; 

Quand je vérifie pour voir que cela fonctionne (NSDate contient les données formatées correctement), il fait ... mais pourquoi?

Ici je passe par les étapes:

  1. mémoire pour NSDateFormatter est alloué et s'instancié dans le tas. dateFormatter pointe vers cet endroit, il a obtenu:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    
  2. maintenant dateFormatter qui est dit comment interpréter NSString « s comme une date, ok:

    [dateFormatter setDateFormat:@"yyyyMMdd"]; 
    
  3. est ici la partie que je suis floue le pointeur inspectionDate est défini sur zéro. Il est ne pointe pas vers quoi que ce soit:

    NSDate *inspectionDate; 
    
  4. Comment est dateFormatter renvoyant un pointeur sur un NSDate quand il n'y avait pas alloc ou init appelé à inspectionDate? L'implémentation de dateFromString fait-elle les alloc et init dans sa mise en œuvre?

    inspectionDate = [dateFormatter dateFromString:inspDate]; 
    

me aider à visualiser ce serait une aide précieuse. Je vous remercie!

Répondre

2

La méthode dateFromString instanciera (probablement par un alloc/init appel à un moment donné, ou une méthode pratique NSDate qui se fera l'allocation) un objet NSDate et vous assigner à votre variable inspectionDate. Comme avec toute méthode "de commodité" qui ne commence pas par alloc, new, ou copy, il n'y a pas de transfert de propriété d'objet, c'est-à-dire que l'instance renvoyée est auto-libérée.

+1

... et autorelease la date retournée. – jrturton

+0

@jrturton réponse mise à jour pour rendre cela explicite. –

+0

Le 'dateFromString' prend soin d'allouer et d'initialiser l'objet' NSDate' pour moi, je pointe juste sa création vivant dans le tas en utilisant mon pointeur 'inspectionDate'. Merci Monsieur! – kevmalek

Questions connexes