2009-11-16 9 views
0

Exemple de code:sur la valeur get de sqlite

NSString *str= [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 1)]; 
Test *t=[[Test alloc] init]; 
t.str=[str copy]; // why use "copy" here? 
[str release]; 
+0

S'il vous plaît modifier l'exemple de code pour le rendre lisible. Mettez quatre espaces au début de chaque ligne pour le formater en tant que texte. – outis

Répondre

1

Il semble être mauvais codage, pour deux raisons. Étant donné que str est supprimé, vous pouvez également l'affecter, plutôt qu'une copie, à t.str. Deuxièmement, et plus important encore, les acteurs doivent prendre soin de conserver ou de copier des données.

1

devrait être:

NSString *str= [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStatement, 1)]; 
Test *t=[[Test alloc] init]; 
t.str=str; // No point copying to release original. 
+0

La version est probablement correcte, car le bloc de code particulier est probablement fait avec 'str'. – outis

+0

@outis - alors que le 'release' était correct pour équilibrer le' retain' implicite par 'copy', l'utilisation de' copy' n'est pas nécessaire (comme vous le décrivez avec précision dans votre réponse) –

+0

@Dave: Vous êtes droite; J'ai négligé le fait que str est autoreleased. – outis