Các loại trong Objective-C trên iOS


147

Tôi muốn hỏi về các kiểu dữ liệu cơ bản trong Objective-C trên iOS.

Tôi cần kích thước mà biến được biểu diễn và phạm vi của biến. Vì vậy, trong ví dụ: short int - 2 byte - đã ký: -32768 đến 32767 và không dấu: 0 đến 65535 Đây chỉ là một ví dụ.


Objective-C là một lớp mỏng trên đỉnh C , nghĩa là bạn có các kiểu dữ liệu cơ bản giống nhưC.
Cœur

Câu trả lời:


349

Đây là một tổng quan tốt:

http://reference.jumpingmonkey.org/programming_lacular/objective-c/types.html

hoặc chạy mã này:

Quá trình 32 bit:

  NSLog(@"Primitive sizes:");
  NSLog(@"The size of a char is: %d.", sizeof(char));
  NSLog(@"The size of short is: %d.", sizeof(short));
  NSLog(@"The size of int is: %d.", sizeof(int));
  NSLog(@"The size of long is: %d.", sizeof(long));
  NSLog(@"The size of long long is: %d.", sizeof(long long));
  NSLog(@"The size of a unsigned char is: %d.", sizeof(unsigned char));
  NSLog(@"The size of unsigned short is: %d.", sizeof(unsigned short));
  NSLog(@"The size of unsigned int is: %d.", sizeof(unsigned int));
  NSLog(@"The size of unsigned long is: %d.", sizeof(unsigned long));
  NSLog(@"The size of unsigned long long is: %d.", sizeof(unsigned long long));
  NSLog(@"The size of a float is: %d.", sizeof(float));
  NSLog(@"The size of a double is %d.", sizeof(double));

  NSLog(@"Ranges:");
  NSLog(@"CHAR_MIN:   %c",   CHAR_MIN);
  NSLog(@"CHAR_MAX:   %c",   CHAR_MAX);
  NSLog(@"SHRT_MIN:   %hi",  SHRT_MIN);    // signed short int
  NSLog(@"SHRT_MAX:   %hi",  SHRT_MAX);
  NSLog(@"INT_MIN:    %i",   INT_MIN);
  NSLog(@"INT_MAX:    %i",   INT_MAX);
  NSLog(@"LONG_MIN:   %li",  LONG_MIN);    // signed long int
  NSLog(@"LONG_MAX:   %li",  LONG_MAX);
  NSLog(@"ULONG_MAX:  %lu",  ULONG_MAX);   // unsigned long int
  NSLog(@"LLONG_MIN:  %lli", LLONG_MIN);   // signed long long int
  NSLog(@"LLONG_MAX:  %lli", LLONG_MAX);
  NSLog(@"ULLONG_MAX: %llu", ULLONG_MAX);  // unsigned long long int

Khi chạy trên iPhone 3GS (iPod Touch và iPhone cũ hơn sẽ mang lại kết quả tương tự) bạn nhận được:

Primitive sizes:
The size of a char is: 1.                
The size of short is: 2.                 
The size of int is: 4.                   
The size of long is: 4.                  
The size of long long is: 8.             
The size of a unsigned char is: 1.       
The size of unsigned short is: 2.        
The size of unsigned int is: 4.          
The size of unsigned long is: 4.         
The size of unsigned long long is: 8.    
The size of a float is: 4.               
The size of a double is 8.               
Ranges:                                  
CHAR_MIN:   -128                         
CHAR_MAX:   127                          
SHRT_MIN:   -32768                       
SHRT_MAX:   32767                        
INT_MIN:    -2147483648                  
INT_MAX:    2147483647                   
LONG_MIN:   -2147483648                  
LONG_MAX:   2147483647                   
ULONG_MAX:  4294967295                   
LLONG_MIN:  -9223372036854775808         
LLONG_MAX:  9223372036854775807          
ULLONG_MAX: 18446744073709551615 

Quá trình 64 bit:

The size of a char is: 1.
The size of short is: 2.
The size of int is: 4.
The size of long is: 8.
The size of long long is: 8.
The size of a unsigned char is: 1.
The size of unsigned short is: 2.
The size of unsigned int is: 4.
The size of unsigned long is: 8.
The size of unsigned long long is: 8.
The size of a float is: 4.
The size of a double is 8.
Ranges:
CHAR_MIN:   -128
CHAR_MAX:   127
SHRT_MIN:   -32768
SHRT_MAX:   32767
INT_MIN:    -2147483648
INT_MAX:    2147483647
LONG_MIN:   -9223372036854775808
LONG_MAX:   9223372036854775807
ULONG_MAX:  18446744073709551615
LLONG_MIN:  -9223372036854775808
LLONG_MAX:  9223372036854775807
ULLONG_MAX: 18446744073709551615

6
Lưu ý rằng với việc phát hành SDK iOS 7, một số loại lớn hơn ở chế độ 64 bit.
JeremyP

13
Đã cập nhật cho quy trình 64 bit
jjxtra

Câu trả lời tuyệt vời thực sự hữu ích. Thật buồn cười, trong Swift bạn chỉ có thể khai báo một "var" và để nó ở đó haha ​​:)

1
Tại sao int là 32 bit trong bộ xử lý 64 bit? Tôi thấy có một thứ gọi là LP64 trong bộ xử lý iphone A7, nhưng tôi không hiểu lý do. Có thể để tương thích ngược hoặc di sản .... Tôi không biết. Có ai biết lý do không?
Ricardo

1
UINT_MAX ở đâu?
mã hóa

20

Lưu ý rằng bạn cũng có thể sử dụng các loại chiều rộng cố định C99 hoàn toàn tốt trong Objective-C:

#import <stdint.h>
...
int32_t x; // guaranteed to be 32 bits on any platform

Các trang wikipedia có một mô tả phong nha của những gì có sẵn trong phần đầu này nếu bạn không có một bản sao của tiêu chuẩn C (bạn nên, tuy nhiên, kể từ khi Objective-C chỉ là một phần mở rộng nhỏ của C). Bạn cũng có thể tìm thấy các tiêu đề limits.hinttypes.hcó ích.


Ngoài ra còn có SInt32, UInt32, v.v. (được sử dụng rất nhiều trong Core Audio).
Nicolas Miari

12

Cập nhật cho vòm 64 bit mới

Ranges:
CHAR_MIN:   -128
CHAR_MAX:   127
SHRT_MIN:   -32768
SHRT_MAX:   32767
INT_MIN:    -2147483648
INT_MAX:    2147483647
LONG_MIN:   -9223372036854775808
LONG_MAX:   9223372036854775807
ULONG_MAX:  18446744073709551615
LLONG_MIN:  -9223372036854775808
LLONG_MAX:  9223372036854775807
ULLONG_MAX: 18446744073709551615
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.