web-dev-qa-db-fra.com

Est-il nécessaire d'attribuer une chaîne à une variable avant de la comparer à une autre?

Je veux comparer la valeur d'un NSString à la chaîne "Wrong". Voici mon code:

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"];
if( [statusString isEqualToString:wrongTxt] ){
     doSomething;
}

Dois-je vraiment créer un NSString pour "Wrong"?

Aussi, puis-je comparer la valeur d'un UILabel d'un text à une chaîne sans affecter la valeur de l'étiquette à une chaîne?

85
Bryan

Dois-je vraiment créer un NSString pour "Wrong"?

Non, pourquoi ne pas simplement faire:

if([statusString isEqualToString:@"Wrong"]){
    //doSomething;
}

En utilisant @"" crée simplement un littéral de chaîne, qui est un NSString valide.

Aussi, puis-je comparer la valeur d'un UILabel.text à une chaîne sans affecter la valeur de l'étiquette à une chaîne?

Oui, vous pouvez faire quelque chose comme:

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}
178
Alex Rozanski
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}
26
Wevah

Brian, cela vaut également la peine de jeter ici - les autres ont bien sûr raison de dire qu'il n'est pas nécessaire de déclarer une variable de chaîne. Cependant, la prochaine fois que vous souhaitez déclarer une chaîne, vous n'avez pas besoin d'effectuer les opérations suivantes:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"];

Bien que ce qui précède fonctionne, il fournit une variable NSString conservée que vous devrez ensuite publier explicitement une fois que vous avez fini de l’utiliser.

La prochaine fois que vous voudrez une variable chaîne, vous pourrez utiliser le symbole "@" de manière beaucoup plus pratique:

NSString *myString = @"SomeText";

Cela sera automatiquement relaché quand vous en aurez fini pour éviter les fuites de mémoire ...

J'espère que ça t'as aidé!

8
h4xxr

Vous pouvez également utiliser les méthodes de la classe NSString qui créeront également une instance autoreleased et auront plus d'options comme le formatage de chaîne:

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
2
danielpunt