UFO ET IT

NSNumber와 NSInteger의 차이점은 무엇입니까?

ufoet 2020. 11. 30. 20:26
반응형

NSNumber와 NSInteger의 차이점은 무엇입니까?


NSNumber와 NSInteger의 차이점은 무엇입니까? 내가 알아야 할 이러한 기본 요소가 더 있습니까? 수레 용이 있나요?


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

예, NSUInteger양의 정수 사이의 범위는.보다 두 배가 NSInteger되지만 둘 중 하나를 선택하는 또 다른 중요한 이유는 단순히 음의 값이 의미가없는 경우를 구별하는 입니다.

예 :NSArraycount메서드 의 반환 값은 NSUInteger입니다. 이는 음수 요소를 가진 배열을 가질 수 없기 때문에 의미가 있습니다. 코더가 서명되지 않았다는 것을 알게되면 시프트와 같은 비트 연산을 포함하여 서명 된 케이스에서 신뢰할 수없는 연산을 더 자유롭게 수행 할 수 있습니다. 이 블로그 게시물 은 서명 된 것과 서명되지 않은 것에 대해 자세히 설명합니다.

CGFloatvsNSFloat 에 대한 내 추측 (존재하지 않음) : NeXTStep 이름이 지정된 코드 요소의 설계자가 시간 간격을 벗어나서 너무 많은 부동 소수점 값을 지정할 필요가 없었던 경우 일 수 있습니다. 그래서 그들은 NSTimeInterval부동 소수점 유형이지만 시간 간격과 함께 사용하기 위해 분명히 의도되었습니다. 그리고 솔직히, 구조체를 다룰 필요없이 항상 몇 초 안에 있어야한다는 것을 알기 때문에 그 유형을 갖는 것이 좋습니다. 그래픽 세계 (Core Graphics가있는 곳)로 이동하면 갑자기 떠 다니는 떠다니며 공중에 떠 있습니다 (하하). 그래서 CGFloat거기 에 소개하는 것이 합리적 입니다. 이 단락은 모두 "교육받은 추측"입니다.

또한 기본 유형 대신 etc를 사용할 수있는 이유를NSInteger 명확히 하기 위해 : 이렇게하면 기계 아키텍처를 최대한 활용하는 이식 가능한 코드를 작성하는 것이 더 쉽기 때문입니다. 예를 들어, a CGFloat는 해당 크기에 대해 해당 시스템에 얼마나 많은 효율성 차이가 있는지에 따라 일부 시스템에서는 32 비트를 사용하고 다른 시스템에서는 64 비트를 사용합니다. 어떤 경우에는 32 비트와 64 비트를 사용하는 데 실제 속도가 향상되지 않으므로 64 비트를 사용하는 것이 좋습니다. CGFloat's' 로 선언 한 경우 재 컴파일 할 때 갑자기 "무료"로 추가 정밀도를 얻게됩니다.

그리고 iKenndac이 지적했듯이 이러한 NSNumber모든 (및 기타 기본 또는 준 기본 유형 (예 :) 에 대한 래퍼 클래스BOOL )을 사용하여 NSArrays 및 NSDictionarys에 포함하고 더 쉽게 보관하고 다음 작업을 수행 할 수 있습니다. NSObjects 할 수 있습니다.


NSNumber는 기본이 아닌 클래스이며 원시 숫자를 사전, 배열에 넣거나 캡슐화해야 할 때 사용됩니다. NSInteger, NSUInteger, CGFloat, 등으로 (아이폰 추천 BT-32 시스템)에 간단한 유형 및 대응이다 int, unsigned intfloat.

일반적으로 숫자를 어딘가에 저장해야하는 경우 NSNumber. 계산, 루프 등을 수행하는 경우 NSInteger, NSUInteger또는 CGFloat.

당신은 포장 할 수 NSInteger로를 NSNumber:

NSNumber *aNumber = [NSNumber numberWithInteger:21];

... 다시 가져 오십시오.

NSInteger anInteger = [aNumber integerValue];

여기에서 자세한 정보를 찾을 수 있습니다. http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html


NSInteger는 intC 의 전통적인 것과 같습니다 . typedef입니다. 같은 사람이 있습니다 NSUInteger, CGFloat모든 원시 유형의 동의어 있다는 등.

NSNumber는 NSArray 또는 NSDictionary에 숫자를 붙여야 할 때 유용합니다. 표준 관행은 이러한 컬렉션을 사용하는 것보다 직접 롤링하는 것입니다. 단점은 Objective-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 [])을 사용하십시오. 그러나 .plist파일에 항목을 읽거나 쓸 때와 같이 때때로 NSArray / NSNumber를 피할 수 없습니다 .


NSNumber는 일반적으로 변수를 저장하는 데 사용되며 NSUInteger는 산술에 사용됩니다.

다음을 수행하여 NSNumber를 NSUInteger로 변경할 수 있습니다.

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

이전에 언급했지만 일반적으로 *로 정의해야하는 변수는 Objective C 클래스 인 반면 *가 필요없는 변수는 C 프리미티브입니다.


전에 다른 사람이 말했듯이, NSNumber입니다 NSObject서브 클래스입니다. 그것은 프리미티브 C 아니다 ( INT, 부호 INT, 플로트, 더블, 등 같은 ) NSInteger, CGFloat, NSUInteger간단 typedefs는 C 프리미티브 위에.

의 필요성은 NSNumber객체를 필요로하는 API에 매개 변수로 숫자를 사용할 필요에서 발생한다. 예를 들어 NSArray, In Core-Data 또는 NSDictionary.

내가 알아야 할 이러한 기본 요소가 더 있습니까? 음, NSNumber은 (는) 기본 유형이 아니며 모든 종류의 숫자 (부동 수, 정수 유형, 부울 등)를 둘러 쌉니다. .NET의 기반이되는 NSValue에 대해서도 배워야합니다 NSNumber.

수레 용이 있나요? float에 대한 "NS"typedef는 없지만 NSNumber모든 float 숫자를 감쌀 수 있습니다.

NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];

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

참고 URL : https://stackoverflow.com/questions/1285098/whats-the-difference-between-nsnumber-and-nsinteger

반응형