문제

nsnumber와 nsinteger의 차이점은 무엇입니까? 내가 알아야 할 이와 같은 프리미티브가 더 있습니까? 플로트를위한 것이 있습니까?

도움이 되었습니까?

해결책

기존 답변은 유용합니다. 그들에게 추가 :

예, NSUInteger 양의 정수 사이에서 두 배의 범위를 제공합니다 NSInteger,하지만 두 사람 중에서 선택해야 할 또 다른 중요한 이유는 단순히 사례를 구별하는 것입니다. 부정적인 값이 단순히 의미가없는 곳.

예시: 반환 값 NSArray'에스 count 메소드는 an입니다 NSUInteger, 우리는 음수의 요소가있는 배열을 가질 수 없기 때문에 의미가 있습니다. 코더가 서명되지 않았다는 것을 알면 서명과 같은 비트 타이어 작업을 포함하여 서명 된 케이스에서 신뢰할 수없는 작업을 수행 할 수있는 자유가 더 많습니다. 이 블로그 게시물 서명 대에 대해 더 많은 이야기를합니다.

내 추측 CGFloat vs NSFloat (존재하지 않음) : NextStep-Named 코드 요소의 설계자가 시간 간격 외에 너무 많은 플로트 값을 지정할 필요가 없었던 경우입니다. 그래서 그들은 주었다 NSTimeInterval, 부동 소수점 유형이지만 시간 간격으로 사용하기위한 것입니다. 그리고 솔직히 말해서, 구조물을 다루지 않고 항상 몇 초 안에 있다는 것을 알고 있기 때문에 그 유형을 갖는 것이 좋습니다. 그래픽 세계 (핵심 그래픽이 살고있는 곳)로 이동하면 갑자기 떠 다니면서 공중 (haha)에 떠 다니고 있습니다. 따라서 소개하는 것이 합리적입니다 CGFloat 거기. 이 단락은 모두 "교육 된 추측"입니다.

또한 명확하게하기 위해 당신이 사용할 수있는 이유 NSInteger 기본 유형 대신 등: 이런 식으로 기계 아키텍처를 최대한 활용하는 휴대용 코드를 작성하는 것이 더 쉽습니다. 예를 들어, a CGFloat 일부 기계에는 32 개의 비트와 다른 기계에는 64 비트를 사용합니다. 그 크기의 해당 기계에 효율성 간격이 얼마나 많은지에 따라 크게 사용됩니다. 경우에 따라 32 비트 대 64 비트를 사용할 수있는 실제 속도가 없으므로 64 비트를 사용할 수도 있습니다. 당신이 물건을 선언했다면 CGFloat다시 컴파일 할 때 갑자기 "무료로"추가 정밀도를 얻습니다.

그리고 Ikenndac이 지적했듯이 NSNumber 모두를위한 래퍼 클래스입니다 이 중 BOOL)이를 통해 귀하가 포함시킬 수 있습니다 NSArray모래 NSDictionarys, 더 쉽게 보관하고 다른 일을하십시오. NSObject할 수 있습니다.

다른 팁

NSNumber 원시가 아닌 클래스이며, 사전 숫자, 배열 또는 다른 방식으로 캡슐화해야 할 때 사용됩니다. NSInteger, NSUInteger, CGFloat, 등은 간단한 유형이며 (iPhone과 같은 32bt 시스템에서) int, unsigned int 그리고 float.

일반적으로 숫자를 어딘가에 보관 해야하는 경우 사용하십시오. NSNumber. 계산, 루프 등을 사용하는 경우 사용 NSInteger, NSUInteger 또는 CGFloat.

당신은 랩을 할 수 있습니다 NSIntegerNSNumber:

NSNumber *aNumber = [NSNumber numberWithInteger:21];

... 그리고 그것을 되 찾으십시오 :

NSInteger anInteger = [aNumber integerValue];

자세한 내용은 다음을 확인할 수 있습니다. http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html

Nsinteger는 전통적인 것과 같습니다 int C.에서 그것은 typedef입니다. 다른 사람들이 있습니다 NSUInteger, CGFloat, 모든 것이 원시 유형의 동의어입니다.

nsnumber는 nsarray 또는 nsdictionary에 숫자를 붙일 때 유용합니다. 표준 관행은 이러한 컬렉션을 사용하는 것과 직접 굴리는 것입니다. 단점은 목표 C 객체 만 포함 할 수 있다는 것입니다.

NSNUMBER는 본질적으로 랩을 마무리합니다 int 배열에 추가 할 수있는 OBJ-C 객체 (C#/Java의 'Boxing'원시 유형의 개념과 유사)로 (플로트 등) : 배열에 추가 할 수 있습니다.

NSArray * myArray = [[NSArray alloc] init];
[myArray addObject:3]; // invalid, will not compile.
[myArray [NSNumber numberWithInt:3]]; // ok

성능의 이유로 가능하면 원시 유형 (int, float, int [])을 사용하십시오. 그러나 때때로, 당신은 당신이 입장을 읽거나 쓰는 것과 같은 nsarray/nsnumber를 피할 수 없습니다. .plist 파일.

NSNUMBER는 일반적으로 변수 저장에 사용되며 NSUINTEGER는 산술에 사용됩니다.

이 작업을 수행하여 nsnumber를 nsuinteger로 변경할 수 있습니다.

NSNumber *variable = @1;
NSUInteger variableInt = [variable unsignedIntegerValue];

이전에 말되었지만 일반적으로 판단의 규칙으로서 *로 정의 해야하는 변수는 객관적인 C 클래스 인 반면 A *가 필요하지 않은 변수는 C 프리미티브입니다.

이전에 다른 사람들이 말했듯이 NSNumber 이다 NSObject 아강. 그것은 C 프리미티브가 아닙니다 (int, 부호없는 int, float, double 등과 마찬가지로) NSInteger, CGFloat, NSUInteger 간단합니다 typedefs C 프리미티브를 통해.

에 대한 필요성 NSNumber 숫자를 객체를 요구하는 API에 매개 변수로 숫자를 사용해야 할 필요성에서 발생합니다. 예를 들어, 숫자를 NSArray, 코어-데이터 또는 an NSDictionary.

내가 알아야 할 이와 같은 프리미티브가 더 있습니까? 잘, NSNumber 원시 유형이 아니며 모든 종류의 숫자 (플로트, 적분 유형, 부울 등)를 감싸고 있습니다. 또한 NSValue에 대해 배워야합니다. NSNumber.

플로트를위한 것이 있습니까? Float 용 "NS"TypEdef는 없지만 NSNumber 플로트 번호를 감싸 수 있습니다.

NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];

또는 CoreGraphics 원시 유형 CGFloat를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top