문제

둘 다 작동하지만 어느 것을 사용하고 그 이유는 무엇입니까?

@implementation NSString (Extender)

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

@end

또는

@implementation NSString (Extender)

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

@end
도움이 되었습니까?

해결책

옵션 #2.

NSString은 불변의 대상입니다. NSString의 모든 표준 "StringBy"메소드는 New AutorEleased NSStrings를 반환합니다.

#1은 또한 새로운 NSString을 반환하게되지만, 의미 적으로 부정확하고 최악의 경우 불변의 대상으로 여겨지는 것에 대한 참조 된 대상을 변경합니다.

다른 팁

첫째, Objective-C 메서드 정의는 다음 C 함수와 정확히 동일합니다.

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

보시다시피, self 또 다른 함수 매개변수입니다.원하는 항목에 다시 할당할 수 있으며 원래 가리키던 원래 NSString* 인스턴스의 상태에는 영향을 주지 않습니다.

따라서 첫 번째 구현에서 수행하는 작업에는 그 점에서 아무런 문제가 없습니다.

그러나 구현 중 어느 것도 매우 효율적이지 않으며 둘 다 버그가 있습니다(두 개 이상의 문자가 포함된 접두사를 전달하면 어떻게 되나요?)

나는 사용할 것이다 rangeOfString:옵션:범위: 접두사를 찾으려면 최대 하나의 추가 NSString 인스턴스만 생성하면 됩니다.

보다 문자열 검색, 비교 및 ​​정렬

그래서 이것은 단지 끈 앞쪽에서 단일 문자를 자르고 있습니다 (그 글자가 두 번 이상 존재하면 많은만큼 잘 차단 될 것입니다)?

NSString은 불변이기 때문에 성능 현명한 차이가 없습니다. 첫 번째 경우에는 매번 자체를 새 문자열 객체로 교체하고 두 번째 경우 returnValue를 매번 새 문자열 객체로 교체합니다. 첫 번째 옵션이 코드 라인을 저장하기 때문에 그 코드를 사용하겠다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top