Question

Les deux fonctionnent, mais que l'on utiliseriez-vous et pourquoi?

@implementation NSString (Extender)

    -(NSString *) stringByTrimmingPrefix:(NSString *)strPrefix 
    {
        while ([self hasPrefix:strPrefix]) 
        {
            self = [self substringFromIndex:strPrefix.length];
        }
        return self;
    }

@end

ou

@implementation NSString (Extender)

    -(NSString *) stringByTrimmingPrefix:(NSString *)strPrefix 
    {
        NSString *returnValue = [NSString stringWithString:self];
        while ([returnValue hasPrefix:strPrefix]) 
        {
            returnValue = [returnValue substringFromIndex:strPrefix.length];
        }
        return returnValue;
    }

@end
Était-ce utile?

La solution

Option n ° 2.

NSString est destiné à être un objet immuable. Toutes les méthodes standard « stringBy » sur NSString retour nouveaux NSStrings autoreleased.

Alors que # 1 finit également retourner une nouvelle NSString, il est au mieux sémantiquement incorrect et, au pire, de modifier l'objet référencé de ce qui était censé être un objet immuable.

Autres conseils

Tout d'abord, la définition de votre méthode Objective-C est exactement équivalente à cette fonction C:

NSString* stringByTrimmingPrefix(NSString* self, SEL _cmd, NSString* strPrefix)
{
    ...
}

Comme vous pouvez le voir, self est juste un autre paramètre de fonction; vous pouvez ré-attribuer à tout ce que vous voulez et il ne sera pas affecter l'état de la NSString * instance d'origine, il pointait à l'origine.

Il n'y a donc rien de mal à ce que vous faites dans votre première mise en œuvre, à cet égard.

Cependant, aucune de vos mises en œuvre sont très efficaces, et les deux ont des bugs (ce qui se passe si vous passez un préfixe avec plus d'un caractère?)

J'utiliser rangeOfString: Options: gamme: pour trouver vos préfixes, de sorte que vous ne créer au plus une instance NSString supplémentaire

.

Voir Recherche, comparaison et tri cordes

ce juste côtelettes hors une seule lettre de l'avant d'une chaîne (si cette lettre est plus d'une fois, il coupera autant qu'il ya)?

Depuis NSString est immuable, je ne suis pas il y a une différence de toute façon, sage performance. Dans le premier cas, vous remplacez l'auto avec un nouvel objet chaîne à chaque fois, et dans le second cas, vous remplacez returnValue avec un nouvel objet chaîne à chaque fois. Je suppose que depuis la première option permet d'enregistrer une ligne de code i utiliserais que l'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top