2010-05-27 3 views
0

C에서 # object o;을 선언하면 o=(float)5.0; 또는 o="a string."을 할당 할 수 있습니다. Objective-C에 해당하는 항목이 있습니까? id을 사용하려했지만 float 또는 integer와 같은 기본 유형을 사용하지 않습니다. 도와 줘서 고맙다.객관적인 C에 대한 C#의 객체와 동일한 것은 무엇입니까?

+0

'할 수있다'는 의미가 아닙니다. 객체의 자유로운 사용은보다 특정한 유형을 사용하여 컴파일 타임에 잡힐 수있는 런타임 오류를 유발할 수 있습니다. –

+0

나는 이것이 필요한 유일한 사람이 아니라고 확신한다. 그 이유는 내가 플랫폼을 개발하고 있기 때문입니다. 고객이 더 적은 일을 할 수 있도록 더 많은 일을하려고했습니다. –

답변

11

Objective-C에는 CLR의 단어에 "통합 유형 시스템"이 없습니다. 즉, C의 수퍼 세트로서 Objective-C의 기본 유형은 객체 인스턴스보다 다른 개의 흉포입니다. id 유형은 모든 객체 인스턴스에 대한 참조 (실제로는 OS X/iPhone Objective-C 런타임의 포인터)를 저장할 수 있습니다. C의 기본 유형 (예 : int, float 등)은 id에 할당되도록 NSValue 또는 NSNumber으로 묶어야합니다. 물론 이것은 정확히 C# 컴파일러가 수행하는 작업입니다. C#에서는 복싱 변환을 명시 적으로 수행 할 필요가 없습니다.

곧,

float val; 
id obj = [NSNumber numberWithFloat:val]; 
... 
float v = [obj floatValue]; 

과 같은 코드는, 만약 불행하게도 자세한 현대의 기준으로 제 2의 천성이 될 것이다.

+0

감사합니다 배리. 나는 당신이 제안한 것을 정확하게 끝내었다. 배열에 c 유형 데이터의 혼합 백을 저장해야하므로 NSNumber로 변환 된 데이터 유형을 쉽게 감지 할 수 있습니까? –

+0

'NSNumber'는'NSValue'의 서브 클래스입니다. 따라서'-objCType'을 사용하고 C 문자열 비교를 통해 실제 숫자 유형을 결정할 수 있습니다 ... 꽤 오래된 학교이지만 작동합니다. 이것은 Objectie-C가 동적으로 타이핑하고 C의 정적 타이핑을 서로 느낄 수있는 욕구가있는 경우입니다. –

3

정말 그런 것은 아닙니다. NSNumber 또는 NSValue을 사용하여 원시 데이터 형식을 개체로 처리 할 수 ​​있습니다. NSString은 문자열을 처리합니다. 이 모든 변수를 id 유형 변수에 할당 할 수 있지만 올바른 클래스의 init 메소드를 사용하여 변수를 만들어야합니다.

3

정확합니다. id은 ObjC 개체 참조에서만 작동합니다. id 참조가있는 int를 참조하려면 NSNumber에 입력해야합니다. 덧붙여 말하자면, C#은 그 프리미티브를 boxing하는 것입니다.

2

위로 나의 날에 우리는 눈에서 오르막길 15 마일을 걸어야했다. void pointers. 오, 우리는 StackOverflow가 없었어요!

+0

질문에 대답하지 않지만 나는 그것을 좋아한다. :) – Ben

+0

나는이 질문을 대답하지 않기 때문에 -1을해야만한다. (CW를 만들려고하고 나는 그 때 그것을 upvote 할 것이다) – OscarRyz

+0

세계가 유머가있는 더 나은 곳이기 때문에 +1. – JeremyP

1

실제로 C# 데이터 형식은 각각의 클래스에 대한 별칭이므로 개체 유형에 할당 할 수 있습니다. 예를 들어 int는 실제로 Int32라는 클래스입니다.

@Barry가 앞서 언급했듯이 Objective-C의 경우는 그렇지 않습니다.

관련 문제