2010-09-14 6 views
0

Est-ce correct?créer un objet NSDate vide

NSDate *myDate; 

Parce que j'utilise quelque chose comme ça avant:

NSDate *myDate = [[NSDate alloc] init]; 

if (something) 
    myDate = thisDate; 
else 
    myDate = thatDate; 

[myFunction initWithDate:myDate]; 

J'ai toujours obtenu « à valeur stockée « myDate » lors de son initialisation est jamais lu ». Si je fais quelque chose comme ça

if (something) 
    NSDate *myDate = thisDate; 
else 
    NSDate *myDate = thatDate; 

[myFunction initWithDate:myDate]; 

Je reçois « variable non utilisée « myDate » » et « « myDate » non déclaré (première utilisation dans cette fonction) »

Comment le look de libération comme? Autorelease?

Répondre

0

Si vous voulez juste pointer vers une date pré-existante, vous pourriez faire quelque chose comme ceci:

NSDate *myDate = something ? thisDate : thatDate; 
[myFunction initWithDate:myDate]; 

ou même

[myFunction initWithDate:something ? thisDate : thatDate]; 

Cependant, pour répondre plus clairement à votre question, oui , cela pourrait bien devrait être:

NSDate *myDate; 

if (something) { 
    myDate = thisDate; 
} else { 
    myDate = thatDate; 
} 

Vous pouvez également initialiser myDate à zéro (myDate = nil), si tu veux.

En ce qui concerne la gestion de la mémoire, vous définissez simplement un pointeur - vous ne créez pas un nouvel objet ou vous ne prenez pas en charge (via retain) un objet existant - vous n'avez donc pas besoin d'utiliser release ou autorelease du tout.

+0

C'est ce que je voulais savoir. Si thisDate ou thatDate est libéré, myDate ne pointe nulle part. Donc je dépends d'eux. Je pense qu'ils sont créés par des fonctions de commodité (dateFromComponents/dateByAddingTimeInterval renvoie de nouveaux objets NSDate), donc j'espère qu'ils sont autoreleased. Rien à voir avec la gestion de la mémoire ici? – testing

0

votre premier essai était proche

NSDate *myDate; 

if (something) 
    myDate = thisDate; 
else 
    myDate = thatDate; 

[myFunction initWithDate:myDate]; 

La première ligne déclare une variable NSDate nommée myDate. Ensuite, vous exécutez votre test et définissez la valeur de myDate de manière appropriée.

+0

Voilà, merci. Désolé, les deux réponses ne peuvent pas être considérées comme une solution. – testing