2010-05-18 3 views
1

이 메서드를 실행할 때 if 문 외부에서 액세스하려고하면 (NULL)로 설정된 두 속성이 설정됩니다. 하지만 그들은 if 문 내부에서 검사하면 0과 NO로 설정됩니다.예상되는 것보다 다른 결과가 init 메소드에서 나옵니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

-(id) init 
{ 
    NSLog(@"Jumping into the init method!"); 

    if (self = [super init]) { 
     NSLog(@"Running the init method extras"); 

     accumulator = 0; 
     NSLog(@"self.accumulator is %g", accumulator); 
     decimal = NO; 
    } 

    NSLog(@"Calc after init is: %@ and %@", self.accumulator, self.decimal); 
    return self; 
} 

무엇이 나오는지에 대한 제안은 for 루프에서 수행 된 것과 다릅니다.

+0

무엇'for' 루프 (그것은 그렇지 않으면 %@의 아마 충돌 것입니다.. 단지뿐만 아니라 그들이 어쨌든 제로 것입니다)? –

+0

잡기에 감사드립니다. if 문을 수정했습니다. –

답변

4

형식 지정자는 다릅니다. 두 번째 경우는 %@ (개체), 첫 번째 경우는 %g (숫자)로 서식 지정됩니다.

+0

고마워, 나는 변화를 만들 때 그것이 작동하는 것을 본다. BOOL의 값에 접근하는 방법을 말해 줄 수 있습니까? 그냥 int로 표현되는 것처럼 % i입니까? –

+0

예, % i를 사용할 수 있지만 YES 값은 직관적이지 않을 수 있습니다. 만약 당신이 좀 더 서술적인 것을 원한다면 형식 문자열에서 % @를 사용하고 arg 목록에서 (self.decimal? @ "YES": @ "NO")를 사용할 수 있습니다 ... – walkytalky

관련 문제