iOS 유형 인코딩(Type Encodings)

3998 단어 iostypeEncodings
우리는 컴파일러 명령@encode()을 통해 주어진 형식의 인코딩 문자열을 얻을 수 있다. 다음 표에는 여러 종류의 인코딩 문자열이 열거되어 있다.
Code
Meaning c
char i
An  int s
short l
long l  is treated as a 32-bit quantity on 64-bit programs. q
long long C
An  unsigned char I
An  unsigned int S
An  unsigned short L
An  unsigned long Q
An  unsigned long long f
float d
double B
A C++  bool  or a C99  _Bool v
void *
A character string ( char * ) @
An object (whether statically typed or typed  id ) #
A class object ( Class ) :
A method selector ( SEL )
[array type] 
An array
{name=type...}
A structure
(name=type...)
A union b num
A bit field of num bits ^ type
A pointer to type ?
An unknown type (among other things, this code is used for function pointers)
중요: Objective-C는 long double 형식을 지원하지 않으며 @encode(long double)는 d를 되돌려줍니다. double 형식의 인코딩 값과 같습니다.
예:
    char *buf = @encode(NSObject*[12]);
    NSLog(@"encode: %s ", buf);
    buf = @encode(float[12]);
    NSLog(@"encode: %s ", buf);
    buf = @encode(float*[12]);
    NSLog(@"encode: %s ", buf);

인쇄 정보:
2015-10-08 12:20:17.370 AppTest[8531:126859] encode: [12@] 
2015-10-08 12:20:17.371 AppTest[8531:126859] encode: [12f] 
2015-10-08 12:20:17.371 AppTest[8531:126859] encode: [12^f] 
설명: 한 수조의 유형 인코딩은 중괄호로 표시되고 중괄호는 수조의 구성원 수량과 유형이다. 위의 예에서 첫 번째는 12개의 대상을 나타내는 수조, 두 번째는 12개의 부점형 변수를 나타내는 수조, 세 번째는 12개의 부점형 지침을 나타내는 수조이다.
예:
typedef struct example {
    int* aPint;
    double  aDouble;
    char *aString;
    int  anInt;
} Example;
   char *buf = @encode(Example);
   NSLog(@"encode: %s ", buf);

인쇄 정보:
2015-10-08 15:33:07.906 AppTest[15180:198504] encode: {example=^id*i} 
설명: 구조체의 유형 인코딩은 큰 괄호로 표시한다. 괄호 중에서 먼저 구조체 유형을 표시하고 그 다음에 등호를 따른다. 등호 뒤에는 선후 순서에 따라 구조체 구성원 변수의 유형을 열거한다. 상례에서 선후 순서에 따라^i는 int형 지침을 표시하고 d는 더블 유형을 표시하며 *는char형 지침, 즉 문자열을 표시한다.i 는 int 형식을 나타낸다.또한 구조체 포인터와 구조체 포인터를 가리키는 포인터의 유형 인코딩은 각각 다음과 같습니다.
    char *buf = @encode(Example*);
    NSLog(@"encode: %s ", buf);
    buf = @encode(Example**);
    NSLog(@"encode: %s ", buf);

인쇄 정보:
2015-10-08 15:55:35.642 AppTest[15968:214671] encode: ^{example=^id*i} 
2015-10-08 15:55:35.642 AppTest[15968:214671] encode: ^^{example} 
마지막으로 대상은 특수한 구조체로 여겨지기 때문에 그들의 유형 인코딩과 구조체는 유사하다.NSObject@encode()에 전참하여 얻은 것은 {NSObject=#}, NSObject
단 한 명의 멤버가 이사이고 클라스 유형이다.그래서 등호 뒤에 # 기호가 붙었다.다음 예제에서 자세히 살펴보십시오.
@interface Book : BaseModel
{
    @private
    NSString* _privateName;
    int* aPint;
    double  aDouble;
    char *aString;
    int  anInt;

}
@property (strong, nonatomic) NSString *author;
@property (assign, nonatomic) NSUInteger pages;
@property (strong, nonatomic) Pen *pen;

+ (void)ClassMethod;
- (void)InstanceMethod;

@end
    char *buf = @encode(Book);
    NSLog(@"encode: %s ", buf);

인쇄 정보:
2015-10-08 16:05:53.097 AppTest[16345:222706] encode: {Book=#@^id*i} 
설명: 뚜렷하다. 선후 순서에 따라Class, 대상, int형 지침, 더블, c 문자열, int 유형 순으로 나뉜다.

좋은 웹페이지 즐겨찾기