2014-09-02 2 views
0

나는 혼란 스럽다. NSData의 sizeof.length 사이의 차이점은 무엇입니까? 길이는 문자 수입니까? 권리? 그러나 sizeof를 의미합니까? 아무도 나를 더 정확하게 설명 할 수 있습니까 pl30NSData의 sizeof와 길이의 차이

+2

Google에 어떻게 잊어 버리면 참으로 혼란 스러울 수 있습니다 ... – holex

답변

3

sizeof()은 유형의 저장소 크기를 반환하고 컴파일 타임에 평가되는 언어 키워드입니다. 예를 들어

:

NSData *obj = [NSData data]; 
NSLog(@"%lu", sizeof(obj)); 

obj 같은 64 비트 플랫폼에서 32 비트 플랫폼이나 8 중 4를 인쇄 할 포인터이며, 그 포인터가 그 플랫폼에서 차지하는 공간입니다. 에 컴파일되는

NSLog(@"%lu", 4); 

또는

NSLog(@"%lu", 8); 

플랫폼에 따라 다음과 같이

그것은 동일합니다.

그러나 NSData은 데이터를 저장하는 개체이며, 현재 저장중인 데이터의 양을 조사 할 수 있도록 length 메서드를 제공합니다. 런타임시 평가됩니다.

NSLog(@"%lu", obj.length); 

0은 그 것으로서 NSData 개체가 비어 있습니다.

0

저는 iOS에 익숙하지 않지만 약간 보았습니다. .Length은 "수신자에 포함 된 바이트 수"인 것 같습니다. .sizeof은 "전체 NSData 구조가 메모리에서 차지하는 실제 바이트 수"를 나타냅니다. length 20 개 문자 (20)를 수 있지만 C 번호가 유니 코드를 사용하는 반면 - sizof()은 .... (40) 그러나, 다른 개체가 완전히 다른 방식으로 작동 할 수 있습니다

를 반환합니다 즉, C#의 문자열을 -

다른 언어에서는 다르게 작동 할 수

그러나 귀하의 예제에서 sizeof()은 포함 된 데이터의 크기 또는 크기에 관계없이 NSData 내부 구조 (실제 데이터, 카운터 등의 포인터와 같은)가 차지하는 바이트 수를 반환 할 수 있습니다. .sizeof의 결과가 단지 4 또는 8 될 것입니다 - -

나는 가장 좋은 방법은있는 NSData 단순히 포인터 인 경우 일부 데이터를 저장하고 두 가지 방법 :)의 출력을 비교하려고하는 것입니다 가정 포인터의 크기 :