다른 변수와 비교하기 전에 문자열을 변수에 할당해야합니까?


85

의 값을 NSString"Wrong"문자열 과 비교하고 싶습니다 . 내 코드는 다음과 같습니다.

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

정말로 "Wrong"에 대한 NSString을 생성해야합니까?

또한, 나는의 값을 비교할 수 UILabel의를 text문자열로 라벨 값을 할당하지 않고 문자열로?


그건 그렇고, initWithFormat으로 시간을 낭비하고 있습니다. NSString * wrongTxt = [[NSString alloc] initWithFormat : @ "Wrong"]; to NSString * wrongTxt = @ "Wrong"; 다른 입력에서 문자열을 계산하려는 경우에만 initWithFormat을 사용하십시오. 예 : NSString * wrongTxt = [[NSString alloc] initWithFormat : @ "% @ was wrong % d times", craigString, wrongCount];
Craig

답변:


178

정말로 "Wrong"에 대한 NSString을 생성해야합니까?

아니요, 그냥하지 않는 이유 :

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

를 사용 @""하면 유효한 NSString.

또한 레이블 값을 문자열에 할당하지 않고 UILabel.text의 값을 문자열과 비교할 수 있습니까?

예, 다음과 같이 할 수 있습니다.

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}

작동합니다. 버그가있는 코드가있는 것 같습니다. 전에 예외가 발생했습니다.
Bryan

1
자세히 설명하기 위해 : label.text 문자열이므로 물론 비교를 위해 문자열을 만들 필요가 없습니다.
Amagrammer

26
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}

감사합니다 wevah. Perspx는 1 초 더 빨랐습니다.
Bryan

8

Brian, 여기에 던질 가치도 있습니다. 다른 것들은 물론 여러분이 문자열 변수를 선언 할 필요가 없다는 것이 맞습니다. 그러나 다음에 문자열을 선언하려는 경우 다음을 수행 할 필요가 없습니다.

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

위의 방법은 작동하지만, 사용을 마친 후 명시 적으로 해제해야하는 유지 된 NSString 변수를 제공합니다.

다음에 문자열 변수를 원할 때 훨씬 더 편리한 방법으로 "@"기호를 사용할 수 있습니다.

NSString *myString = @"SomeText";

완료되면 자동 해제되므로 메모리 누수도 방지 할 수 있습니다.

도움이 되었기를 바랍니다.


나는 그것에 대해 궁금했다. 객관적인 c 객체 인 문자열 변수를 자주 볼 수 있지만 결코 해제되지 않습니다. 감사!
Bryan

2
힌트는 "alloc"비트에 있습니다. Alloc (또는 Copy)을 사용하는 경우 특별히 해제해야합니다. 그렇지 않은 경우 관례는 객체가 이미 자동 해제로 설정된다는 것입니다.
h4xxr

예, 그것은 포함 할 수 있지만, new또는 copy예를 들어, newObject(에서 NSDictionaryController) 또는 mutableCopy(에서 NSObject) developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/...
알렉스 Rozanski

2

자동 해제 된 인스턴스를 생성하고 문자열 형식과 같은 더 많은 옵션이있는 NSString 클래스 메서드를 사용할 수도 있습니다.

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.