2017-01-26 4 views
0

내가 다음과 같은 방법으로 조건부 문 앞에 변수를 초기화하는 데 사용 :조건문 앞에 목표 C에서 변수를 초기화하는 가장 좋은 방법은 무엇입니까?

NSString *string = [[NSString alloc] init]; 
if (conditional statement) { 
    string = @"foo"; 
} 
else{ 
    string = @"bar"; 
} 

그러나 엑스 코드 분석기 불평 :

: 그래서

"Value stored to 'string' during its initialization is never read" 

, 그때 다른 옵션의 몇 가지 시도

A :

B :

NSString *string = @"bar"; 
if (conditional statement) { 
    string = @"foo"; 
} 

그래서 제 질문은, 목표 C에서 변수를 초기화 할 수있는 가장 좋은 방법은 조건부 문 앞에, 무엇입니까?

UPDATE :

변수 자체가 조건부 [판독] 사용되지 않는다. 여기에 아래의 예입니다 ...

NSString *string = [[NSString alloc] init]; 
if (x == 0) { 
    string = @"foo"; 
} 
else{ 
    string = @"bar"; 
} 

UPDATE : 좋은 타협은 스벤의 답변에 따라

, 그것은 보인다처럼 :

NSString *string; 
if (x == 0) { 
    string = @"foo"; 
} 
else{ 
    string = @"bar"; 
} 
+0

조건문에 대한 정보를 제공하십시오. 조건문에 string을 사용할 것입니까? – balagurubaran

+0

유사 [질문] (http://stackoverflow.com/questions/13220777/objective-c-initializing-nsstring) 또는 [또한 좋습니다] (http://stackoverflow.com/questions/9254502/nsstring-allocation-and) -initializing) – Peter

+0

@balagurubaran 변수 자체가 조건부 내에서 읽히지 않음을 보여주기 위해 코드를 작성했습니다. –

답변

1

A와 B가 모두 유효한 옵션입니다 . 결국에는 문자열 리터럴을 할당하면 결국 중요하지 않습니다. 컴파일러는 두 경우 모두 동일한 코드를 생성 할 수도 있습니다.

물론 컴파일 타임 상수 이외의 다른 것을 지정하면 더 조심해야합니다. 계산에서 발생하는 부작용에 따라 하나 또는 다른 버전 만 정확합니다.

당신의 경우에는 처음에는 변수를 nil-initialise 할 필요조차 없다. 컴파일러는 어떤 경우에도 초기화된다는 것을 알기에 충분히 똑똑하다. 이런 상황에서 어떤 조건에 따라 변수를 초기화하려면 변수가 정의 된 초기화를 건너 뛰는 것이 좋습니다. 그런 다음 변수를 초기화하는 것을 잊어 버린 코드 경로가 있으면 컴파일러에서 경고를 생성 할 수 있습니다.

이 또 다른 옵션은 삼항 연산자 ?: 사용하는 것입니다

NSString *string = condition ? @"foo" : @"bar"; 

이 쓸 단지 짧은되지 않습니다, 또한 즉시 명확 변수에 상관없이 조건이 무엇인지 초기화되지 않도록한다.

+0

답변 해 주셔서 감사합니다. 당신이 말하는, 난 그냥 이런 식으로 사용할 수 있습니다 : NSString * string; NSString이 아닌 string = nil; –

+0

답변 해 주셔서 감사합니다. 당신이 말하는, 난 그냥 이런 식으로 사용할 수 있습니다 : NSString * string; NSString이 아닌 string = nil; 이 경우 사실 NSString * string이 좋습니다. 최고야. 그것은 가장 깨끗한 솔루션이지만, 나는 분석기가 흔들리지 않도록 체크 할 필요가 있습니다 ... –

+1

그것이 바로 제가 말한 것입니다. 변수를 정의한 동일한 행에서 변수를 초기화 할 필요는 없습니다. 사용하기 전에 초기화되었는지 확인해야합니다. – Sven