Pergunta

Tanto trabalho, mas qual deles você usa e por quê?

@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
Foi útil?

Solução

Opção # 2.

NSString se destina a ser um objeto imutável. Todas as padrão métodos "stringBy" na NSString retorno nova autoreleased NSStrings.

Enquanto nº 1 também acaba retornando uma nova NSString, é na melhor das hipóteses semanticamente incorreto e, na pior, alterando o objeto referenciado do que era suposto ser um objeto imutável.

Outras dicas

Em primeiro lugar, o Objective-C definição do método é exatamente equivalente a esta função C:

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

Como você pode ver, self é apenas mais um parâmetro de função; você pode re-atribuí-la a qualquer coisa que você quer e não vai afetar o estado do original NSString * instância foi originalmente apontando.

Portanto, não há nada de errado com o que você está fazendo em sua primeira implementação, a esse respeito.

No entanto, nenhuma das suas implementações são muito eficientes, e ambos têm erros (o que acontece se você passar um prefixo com mais de um personagem?)

Gostaria de usar rangeOfString: opções: intervalo:. para encontrar seus prefixos, para que você só está criando no máximo uma instância NSString adicional

Searching, comparação e classificação cordas

de modo que este apenas corta uma única letra de frente de uma corda (se a carta está lá mais de uma vez, ele vai cortar como muitos como existem)?

Desde NSString é imutável, não há uma diferença de qualquer forma, o desempenho sábio. No primeiro caso, você está substituindo auto com um novo objeto string cada vez, e no segundo caso, você está substituindo returnValue com um novo objeto string cada vez. Eu acho que desde a primeira opção salva uma linha de código i iria usar aquele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top