NSNumber와 NSInteger의 차이점은 무엇입니까?
NSNumber와 NSInteger의 차이점은 무엇입니까? 내가 알아야 할 이러한 기본 요소가 더 있습니까? 수레 용이 있나요?
기존 답변이 유용합니다. 그들에 추가 :
예, NSUInteger
양의 정수 사이의 범위는.보다 두 배가 NSInteger
되지만 둘 중 하나를 선택하는 또 다른 중요한 이유는 단순히 음의 값이 의미가없는 경우를 구별하는 것 입니다.
예 :NSArray
의 count
메서드 의 반환 값은 NSUInteger
입니다. 이는 음수 요소를 가진 배열을 가질 수 없기 때문에 의미가 있습니다. 코더가 서명되지 않았다는 것을 알게되면 시프트와 같은 비트 연산을 포함하여 서명 된 케이스에서 신뢰할 수없는 연산을 더 자유롭게 수행 할 수 있습니다. 이 블로그 게시물 은 서명 된 것과 서명되지 않은 것에 대해 자세히 설명합니다.
CGFloat
vsNSFloat
에 대한 내 추측 (존재하지 않음) : NeXTStep 이름이 지정된 코드 요소의 설계자가 시간 간격을 벗어나서 너무 많은 부동 소수점 값을 지정할 필요가 없었던 경우 일 수 있습니다. 그래서 그들은 NSTimeInterval
부동 소수점 유형이지만 시간 간격과 함께 사용하기 위해 분명히 의도되었습니다. 그리고 솔직히, 구조체를 다룰 필요없이 항상 몇 초 안에 있어야한다는 것을 알기 때문에 그 유형을 갖는 것이 좋습니다. 그래픽 세계 (Core Graphics가있는 곳)로 이동하면 갑자기 떠 다니는 떠다니며 공중에 떠 있습니다 (하하). 그래서 CGFloat
거기 에 소개하는 것이 합리적 입니다. 이 단락은 모두 "교육받은 추측"입니다.
또한 기본 유형 대신 etc를 사용할 수있는 이유를NSInteger
명확히 하기 위해 : 이렇게하면 기계 아키텍처를 최대한 활용하는 이식 가능한 코드를 작성하는 것이 더 쉽기 때문입니다. 예를 들어, a CGFloat
는 해당 크기에 대해 해당 시스템에 얼마나 많은 효율성 차이가 있는지에 따라 일부 시스템에서는 32 비트를 사용하고 다른 시스템에서는 64 비트를 사용합니다. 어떤 경우에는 32 비트와 64 비트를 사용하는 데 실제 속도가 향상되지 않으므로 64 비트를 사용하는 것이 좋습니다. CGFloat
's' 로 선언 한 경우 재 컴파일 할 때 갑자기 "무료"로 추가 정밀도를 얻게됩니다.
그리고 iKenndac이 지적했듯이 이러한 NSNumber
모든 (및 기타 기본 또는 준 기본 유형 (예 :) 에 대한 래퍼 클래스BOOL
)을 사용하여 NSArray
s 및 NSDictionary
s에 포함하고 더 쉽게 보관하고 다음 작업을 수행 할 수 있습니다. NSObject
s 할 수 있습니다.
NSNumber
는 기본이 아닌 클래스이며 원시 숫자를 사전, 배열에 넣거나 캡슐화해야 할 때 사용됩니다. NSInteger
, NSUInteger
, CGFloat
, 등으로 (아이폰 추천 BT-32 시스템)에 간단한 유형 및 대응이다 int
, unsigned int
및 float
.
일반적으로 숫자를 어딘가에 저장해야하는 경우 NSNumber
. 계산, 루프 등을 수행하는 경우 NSInteger
, NSUInteger
또는 CGFloat
.
당신은 포장 할 수 NSInteger
로를 NSNumber
:
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에 숫자를 붙여야 할 때 유용합니다. 표준 관행은 이러한 컬렉션을 사용하는 것보다 직접 롤링하는 것입니다. 단점은 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
'UFO ET IT' 카테고리의 다른 글
Apple의 iPhone 및 공식 App Store와 호환되는 오픈 소스 라이선스는 무엇입니까? (0) | 2020.12.01 |
---|---|
VS2015 : 경고 MSB3884 : 규칙 집합 파일을 찾을 수 없습니다. (0) | 2020.11.30 |
코드 골프 : 큐브 플레이 (0) | 2020.11.30 |
Mysql 열을 재정렬하는 방법은 무엇입니까? (0) | 2020.11.30 |
Rspec 테스트 redirect_to : back (0) | 2020.11.30 |