sourcetip

NSInterger를 사용하는 경우와 int.

fileupload 2023. 4. 13. 21:05
반응형

NSInterger를 사용하는 경우와 int.

요?NSIntegerOS int int? 샘플 Apple을 사용하고 있는 을 알 수 .NSInteger (오류)NSUInteger) 값을 인수로 함수에 전달하거나 함수에서 값을 반환할 때 사용합니다.

- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...

하지만 기능 내에서 그들은 단지 그 기능을 사용하고 있다.int

for (int i; i < something; i++)
...

int something;
something += somethingElseThatsAnInt;
...

NSInteger 또는 64비트 32비트 환경을 사용하는 이유는 입니까?int★★★★★★★★★★★★★★★★★?

으로는 '어느 정도'를 합니다.NSInteger상에서 에는 어떤 큰타입이 할 수 이 """ "" "" "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 입니다.이것은 32비트 시스템에서는 단순한 정수 타입입니다.intlong

는 계속 난 i i i를 NSIntegerint/long특별히 필요한 경우를 제외하고는요.

NSInteger/NSUInteger*dynamic *dynamic으로 정의됩니다.typedef*s는 다음 유형 중 하나이며 다음과 같이 정의됩니다.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

이러한 각 유형에 대해 사용해야 하는 올바른 형식 지정자에 대해서는 "String Programming Guide"의 "Platform Dependencies" 섹션을 참조하십시오.

「」를 사용하는가?int★★★★★★★★★★★★★★★★★?

은 ★★★★★★★★★★★★★★★★★★★★★.int 변수의 경우, 「」(루프 반복 제어에만 사용됨)는 「」입니다.int데이터형은 데이터형 크기와 루프에 대해 유지할 수 있는 값 모두 괜찮습니다.플랫폼 의존형 데이터형은 필요 없습니다.루프 제어 변수의 경우 16비트까지int★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

은 ★★★★★★★★★★★★★★★★★★★★★.NSInteger함수 반환 값 또는 함수 인수에 대해서는 함수에서 수행하는 작업이 다른 프로그램 또는 다른 코드 조각과 통신/전달되기 때문에 데이터 유형이 중요하기 때문입니다. "NSInteger vs int를 사용해야 하는 경우"의 답변을 참조하십시오.질문 자체가...

[Apple]에서는 을 함수에 인수로 전달하거나 함수에서 값을 반환할 때 NSInterger(또는 NSUIInterger)를 사용합니다.

OS X는 "LP64"입니다.즉, 다음과 같습니다.

int32번입니다.

long long64번입니다.

NSInteger ★★★★★★★★★★★★★★★★★」long는 항상 포인터 크기입니다.시스템에서는 시스템에서는 입니다.

는 많은 API가 NSInterger를 사용했기 입니다.intlong변수를 를 API에서 .int로로 합니다.long64번입니다. 기능 . NSInteger는 이러한 레거시 API를 사용하여 이 문제를 은폐하려고 합니다.

에는 '비슷하다'를 사용합니다.int변수가 32비트 변수long long 정수 및 정수가 long또는NSInteger포인터 크기 변수가 필요한 경우.

NSInteger의 구현을 자세히 살펴보면 다음과 같습니다.

#if __LP64__
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

NSInteger typedef를 사용하면 다음과 같은 절차를 수행할 수 있습니다.아키텍처가 32비트일 경우,int64비트인 경우,longNSInterger를 사용하면 프로그램이 실행되고 있는 아키텍처에 대해 걱정할 필요가 없습니다.

NSIntergers는 NSNotFound나 NSIntergerMax 등의 상수 값과 비교할 필요가 있는 경우 NSIntergers를 사용해야 합니다.이러한 값은 32비트시스템과 64비트시스템에서는 다르기 때문에 인덱스 값, 카운트 등은 NSInterger 또는 NSInterger를 사용합니다.

NSInteger를 사용하는 것은 2배의 메모리를 사용하는 것을 제외하고 대부분의 경우 문제가 되지 않습니다.메모리의 영향은 매우 적지만, 항상 대량의 숫자가 떠돌고 있는 경우는, ints 를 사용하는 것에 차이가 생기는 경우가 있습니다.

NSInteger 또는 NSInteger를 사용하는 경우 형식 문자열을 사용할 때 긴 정수 또는 부호 없는 긴 정수로 캐스팅해야 합니다. 새로운 Xcode 기능은 NSInteger의 길이가 알려진 것처럼 로그아웃하면 경고를 반환하기 때문입니다.마찬가지로 ints로 입력된 변수나 인수에 전송할 때도 프로세스에서 정밀도가 떨어질 수 있으므로 주의해야 합니다.

대체로 한 번에 수십만 개의 메모리가 저장될 것으로 예상되지 않는다면 NSInterger를 사용하는 것이 항상 두 가지 차이점에 대해 고민하는 것보다 쉽습니다.

iOS 에서는, 현시점에서는, 다음의 조작을 실시해도 상관없습니다.int또는NSIntegeriOS가 64비트로 이동하면 더 중요해집니다.

간단히 말하면NSIntegers는int32비트 코드(따라서 32비트 길이) 및long64비트 코드의 경우)long는 64비트 코드에서는 64비트이지만 32비트 코드에서는 32비트입니다).사용하는 가장 가능성이 높은 이유NSInteger대신long기존 32비트 코드를 해제하지 않는 것입니다(이것에 의해,ints)

CGFloat같은 문제가 있다: 32비트(최소한 OS X)에서는float; 64비트에서는double.

업데이트: iPhone 5s, iPad Air, Retina 탑재 iPad Mini, iOS 7의 도입으로 iOS 상에서 64비트 코드를 구축할 수 있게 되었습니다.

업데이트 2: 또한 사용NSIntegers는 Swift 코드 상호 운용성에 도움이 됩니다.

현재(2014년 9월)부터는NSInteger/CGFloatiOS API 등과 상호 작용할 때 arm64용 앱을 빌드하는 경우 등그 이유는 이 명령어를 사용하면 예기치 않은 결과를 얻을 수 있기 때문입니다.float,long그리고.int종류들.

예: 플로트/더블 vs CG플로트

예를 들어 UITableView 위임 방식을 사용합니다.tableView:heightForRowAtIndexPath:.

32비트만의 애플리케이션에서는, 다음과 같이 기술되어 있으면 정상적으로 동작합니다.

-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}

float는 32비트 값이고 반환되는 44는 32비트 값입니다.그러나 64비트 arm64 아키텍처에서 동일한 코드를 컴파일/실행하면 44는 64비트 값이 됩니다.32비트 값이 예상될 때 64비트 값을 반환하면 예기치 않은 행 높이가 발생합니다.

이 문제를 해결하려면CGFloat유형

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}

이 유형은 32비트를 나타냅니다.float32비트 환경 및 64비트 환경에서double64비트 환경에서 사용할 수 있습니다.따라서 이 유형을 사용할 경우 메서드는 컴파일/런타임 환경에 관계없이 항상 예상된 유형을 수신합니다.

정수를 요구하는 메서드도 마찬가지입니다.이러한 방법에서는 32비트가 필요합니다.int32비트 환경 및 64비트 환경에서의 값long64비트 환경에서 사용할 수 있습니다.다음을 사용하여 이 문제를 해결할 수 있습니다.NSInteger의 역할을 하는int또는long컴파일/컴파일 환경을 기반으로 합니다.

int = 4바이트(아키텍트 크기에 관계없이 지정) NSInterger = 설계자 크기에 따라 다름(4바이트 설계자 = 4바이트 NSInterger 크기)

언급URL : https://stackoverflow.com/questions/4445173/when-to-use-nsinteger-vs-int

반응형