2012-12-12 3 views
0

NSMutableArray에 "3.141593"이라는 문자열로 M_PI가 추가되는 이유는 무엇입니까? M_PI를 배열에 float으로 추가하려면 어떻게해야합니까?addObject를 사용할 때 M_PI가 문자열로 변환됩니다.

- (void)pushOperand:(float)operand 
{ 
    [self.operandStack addObject:[NSNumber numberWithFloat:operand]]; 
} 

[self pushOperand:M_PI]; 

답변

1

다른 사람들이 말했듯이, NSMutableArray에는 직접 float을 저장할 수 없습니다. 그러나 귀하의 코드는 이미 NSNumber의 인스턴스로 값을 삽입하고 있으며 이것이 사용자가 원하는 것입니다. 물론 :-)

스탠포드 아이폰 OS 작업을 수행하는, 그런데,

double value = 0; 

id topOfStack = [stack popOperand]; 

if ([topOfStack isKindOfClass:[NSNumber class]]) 
    result = [topOfStack doubleValue]; 

명예 : 당신이 배열에서 개체를 다시 끌어 때 나중에, 당신은 이런 식으로 뭔가가있는 POD 유형으로 복원 할 수 있습니다

0

M_PI는 객체이지만 문자열이 아닌 NSObject로 변환됩니다.

+0

NSObject로 변환하는 것은 무엇입니까? M_PI가 상수 부동 소수입니까? 그래서 당신은 수레가 무엇이든지 변환되는 대상으로 변환된다는 말입니까? –

+0

M_PI가 잘못된 객체라는 것을 의미하는 경우이 대답을 이해하지 못했습니다. –

+0

[NSNumber numberWithFloat : operand]는 부동 소수점을 NSObject에서 상속 한 NSNumber로 변환합니다. 왜 NSLog ("% @", ...)를 통해 NSObject로 객체를 덤프 할 수 있으며 문자열처럼 보입니다. – neo

0

NSMutableArray에는 NSObject 및 하위 항목 만 POD 유형을 추가 할 수 없습니다. 이는 추가 할 때 retain 메시지가 객체에 전송되고 제거 될 때 release 메시지가 전송되기 때문입니다. 당신이 float를 사용하기 원한다면 당신은 smth를 고려해야합니다. std::vector<float>입니다.

0

부동에 가까운 것은이의 NSNumber입니다 :

NSNumber* mpi= @(M_PI); 
0

귀하의 코드가 잘 보인다. 배열에 추가 할 때 NSString이라고 생각하는 이유는 무엇입니까?

관련 문제