iOS开发技术iOSDevSupport

iOS - NSValue 与 @encode

2015-10-26  本文已影响2149人  Mitchell

一、NSValue 很有用的包装对象的两个用法

    NSData*data = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
    /** 用 NSValue 包装 Objective-C 对象 */
    NSValue *value = [NSValue valueWithBytes:&data objCType:@encode(NSString)];
    NSLog(@"%@",value);
    /** NSValue 创建并返还一个包含给定对象的  */
    NSObject*objc = [NSObject new];
    NSValue * value2 = [NSValue valueWithNonretainedObject:objc];
    NSLog(@"%@",value2);

二、关于 @encode

                           Objective-C Type Encodings
 编码             意义
 c             --->    A char
 i              --->   An int
 s              --->   A short
 l              --->   A longl is treated as a 32-bit quantity on 64-bit programs.
 q              --->   A long long
 C             --->    An unsigned char
 I              --->   An unsigned int
 S             --->    An unsigned short
 L              --->   An unsigned long
 Q             --->    An unsigned long long
 f              --->   A float
 d              --->   A double
 B              --->   A C++ bool or a C99 _Bool
 v              --->   A 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
 bnum           --->   A bit field of num bits
 ^type          --->   A pointer to type
 ?             --->    An unknown type (among other things, this code is used for function pointers)
    NSLog(@"int        : %s", @encode(int));
    NSLog(@"float      : %s", @encode(float));
    NSLog(@"float *    : %s", @encode(float*));
    NSLog(@"char       : %s", @encode(char));
    NSLog(@"char *     : %s", @encode(char *));
    NSLog(@"BOOL       : %s", @encode(BOOL));
    NSLog(@"void       : %s", @encode(void));
    NSLog(@"void *     : %s", @encode(void *));
    
    NSLog(@"NSObject * : %s", @encode(NSObject *));
    NSLog(@"NSObject   : %s", @encode(NSObject));
    NSLog(@"[NSObject] : %s", @encode(typeof([NSObject class])));
    NSLog(@"NSError ** : %s", @encode(typeof(NSError **)));
    
    int intArray[5] = {1, 2, 3, 4, 5};
    NSLog(@"int[]      : %s", @encode(typeof(intArray)));
    
    float floatArray[3] = {0.1f, 0.2f, 0.3f};
    NSLog(@"float[]    : %s", @encode(typeof(floatArray)));
    
    typedef struct _struct {
        short a;
        long long b;
        unsigned long long c;
    } Struct;
    NSLog(@"struct     : %s", @encode(typeof(Struct)));

文章来源


上一篇下一篇

猜你喜欢

热点阅读