您的位置:首页 > 其它

运行机制归档

2016-04-16 21:39 381 查看
- (void)encodeWithCoder:(NSCoder *)aCoder {

    unsigned
int count;

   
//获得指向当前类的所有属性的指针

    objc_property_t *properties =
class_copyPropertyList([self
class], &count);

    

    for (int i =
0; i < count; i++) {

       
//获取指向当前类的一个属性的指针

        objc_property_t property = properties[i];

        //获取C字符串属性名

        const
char *name = property_getName(property);

        

        

        

        //C字符串转OC字符串

        NSString *propertyName = [NSString
stringWithUTF8String:name];

        

        NSLog(@"=====iii==%@",propertyName);

        //通过关键词取值

        NSString *propertyValue = [self
valueForKey:propertyName];

        NSLog(@"===rr==iii==%@",propertyValue);

        //编码属性

        [aCoder encodeObject:propertyValue
forKey:propertyName];

    }

    //记得释放

    free(properties);

}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {

    unsigned
int count;

   
//获得指向当前类的所有属性的指针

    objc_property_t *properties =
class_copyPropertyList([self
class], &count);

    

    for (int i =
0; i < count; i++) {

       
//获取指向当前类的一个属性的指针

        objc_property_t property = properties[i];

        //获取C字符串属性名

        const
char *name = property_getName(property);

        //C字符串转OC字符串

        NSString *propertyName = [NSString
stringWithUTF8String:name];

        //解码属性值

        NSString *propertyValue = [aDecoder
decodeObjectForKey:propertyName];

        [self
setValue:propertyValue
forKey:propertyName];

    }

    //记得释放

    free(properties);

    return
self;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: