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];
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];
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.
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.
La version est probablement correcte, car le bloc de code particulier est probablement fait avec 'str'. – outis
@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) –
@Dave: Vous êtes droite; J'ai négligé le fait que str est autoreleased. – outis
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