.main.m文件

/*

    定义Student类
    1、属性有age,name,gender; 2、age使⽤用assign,name使⽤用retain,gender使⽤用copy; 3、重写age、name、gender的setter和getter⽅方法。
    */

if 0

    
    Student *stu = [[Student alloc] init];
    
    // KVC 间接访问的一种方式
    [stu setValue:@"longlong" forKey:@"name"];
    NSLog(@"%@", [stu valueForKey:@"name"]);
    
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"long", @"name", @"m", @"gender", @"23", @"age", @"200", @"id", nil];
    // 重要方法   就字典中的内容按照key值 对应的写入对象中
    [stu setValuesForKeysWithDictionary:dic];
    NSLog(@"%@ %@",stu.name, stu.gender);
    
    

屏幕快照 2016-01-08 下午7.20.28.png

Student.h文件

@interface Student : NSObject
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString *idstr;

  • (instancetype)initWithName:(NSString *)name

                         age:(NSInteger)age
                      gender:(NSString *)gender;
  • (instancetype)StudentWithName:(NSString *)name

                            age:(NSInteger)age
                         gender:(NSString *)gender;
    

屏幕快照 2016-01-08 下午7.20.12.png

Student.m文件

@synthesize age = _age;
@synthesize name = _name;
@synthesize gender = _gender;

  • (void)dealloc
    {
    [_name release];
    [_gender release];
    [super dealloc];
    }
  • (void)setName:(NSString *)name {
    if (_name != name) {

    [_name release];
    _name = [name retain];

    }
    }

  • (NSString *)name {
    return [[_name retain] autorelease];
    }
  • (void)setGender:(NSString *)gender {
    if (_gender != gender) {

    [_gender release];
    _gender = [gender copy];

    }
    }

  • (NSString *)gender {
    return [[_gender retain] autorelease];
    }
  • (void)setAge:(NSInteger)age {
    _age = age;
    }
  • (NSInteger)age {
    return _age;
    }
  • (instancetype)initWithName:(NSString )name age:(NSInteger)age gender:(NSString )gender
    {
    self = [super init];
    if (self) {

    self.name = name;
    self.gender = gender;
    self.age = age;

    }
    return self;
    }

  • (instancetype)StudentWithName:(NSString )name age:(NSInteger)age gender:(NSString )gender
    {
    Student *p = [[Student alloc] initWithName:name age:age gender:gender];
    return [p autorelease];
    }

//

  • (void)setValue:(id)value forKey:(NSString *)key
    {

    [super setValue:value forKey:key];
    if ([key isEqualToString:@"age"]) {

    // 其他类型转NSInteger类型
    self.age = [value integerValue];

    }
    }

// 重定义setValue // KVC 时 不崩溃

  • (void)setValue:(id)value forUndefinedKey:(NSString *)key
    {

    // 如上面

    }

屏幕快照 2016-01-08 下午7.19.51.png
屏幕快照 2016-01-08 下午7.19.35.png
屏幕快照 2016-01-08 下午7.19.22.png