Objc-C 知识点回顾 九 Property

1.属性
        //属性:为你自动生成setter和getter
        //能在⼀定程度上简化程序代码,并且增强实例变量的访问安全性

        //属性声明的写法
        //@property 数据类型 实例变量名;
       
        //属性实现的写法
        //@synthesize 实例变量名;
       
2.属性的修饰符
        //修饰符, 实质是对setter和getter方法的限定
       
        //(1)线程安全组
        //nonatomic: 非原子性(不对多线程进行管理, 效率高)
        //atomic: 原子性(在多线程下使用, 保证线程安全, 但效率会很低)
        //注:a.默认值:atomic, 一般使用nonatomic
        //  b.atomic修饰的属性, 要么同时重写setter和getter, 要么都不重写; 不允许只重写其中一个方法
       
        //(2)内存管理组
        //assign(默认值)
        //retain
        //copy
        //weak
        //strong
       
        //week和strong在ARC下才能够使用
        //基本数据类型用assign
        //对象用retain, weak, strong
        //既是对象, 并且对象遵循协议, 才能使用copy
        //注:delegate写成属性, 在ARC下用weak, 在MRC下用assign
       
        //(3)读写组
        //readwrite(默认值)可读写, 生成setter和getter
        //readonly:只读, 只生成getter
       
        //(4)方法重命名组
        //setter=方法名
        //getter=方法名
        //注:重新修改setter和getter的名字, 不影响点语法的使用
       
3.点语法
        //点语法是setter 和 getter的快捷调用方法
        //属性是⼀对getter、setter方法,点语法是属性的另一种调用格式
        //如果点语法出现在赋值等号的左侧, 调用setter; 其他位置, 调用getter

4.KVC
        //KVC(Key-Value-Coding),键值编码,是一种间接访问实例变量的方法
        //设置
        [man setValue:@"lisi" forKey:@"name"];
        //获取
        NSLog(@"%@", [man valueForKey:@"name"]);
       
        //通过KVC访问属性, key是属性名, 如果key写错, 会导致程序崩溃
        NSLog(@"%@", [man valueForKey:@"anme"]);
        [man setValue:@"aaa" forKey:@"mena"];

        //当key不存在的时候,会执⾏setValue:forUndefinedKey:
       
        Man *man1 = [[Man alloc] initWithName:@"王五" work:@"家里蹲" age:25];
        NSLog(@"%@", man1);
       
        //KVC通过字典对多个属性赋值
        Man *man2 = [[Man alloc] init];
        NSDictionary *dic = @{@"name":@"123", @"age":@26, @"work":@"学习"};
        [man2 setValuesForKeysWithDictionary:dic];
        NSLog(@"%@", man2);
       
        Father *father = [[Father alloc] init];
        father.work = @"移动互联";
       
        Son *son = [[Son alloc] init];
        son.play = @"玩球";
       
        father.son = son;
        NSLog(@"%@", [father valueForKey:@"work"]);
        NSLog(@"%@", [son valueForKey:@"play"]);
        NSLog(@"%@", [father.son valueForKey:@"play"]);
        NSLog(@"%@", [[father valueForKey:@"son"] valueForKey:@"play"]);
       
        //通过keypath访问属性(可以使用点语法)
        NSLog(@"%@", [father valueForKeyPath:@"son.play"]);
        //通过keypath设置属性
        [father setValue:@"玩气球" forKeyPath:@"son.play"];
       
        Father *father1 = [[Father alloc] init];
        father1.work = @"卖糖葫芦";
        Son *son1 = [[Son alloc] init];//Son *son1;//对象没有开辟内存, 初始化, 对其设置属性或调用方法, 都是无效的
        son1.play = @"和尿泥";
        father1.son = son1;
        NSLog(@"%@", [father1 valueForKey:@"work"]);
        NSLog(@"%@", [son1 valueForKey:@"play"]);
       
        Girl *girl1 = [[Girl alloc] init];
        girl1.age = 16;
       
        Girl *girl2 = [[Girl alloc] init];
        girl2.age = 18;
       
        Girl *girl3 = [[Girl alloc] init];
        girl3.age = 20;
       
        NSArray *array = @[girl1, girl2, girl3];
       
        //KVC在数组中的使用
        NSLog(@"%@", [array valueForKey:@"@count"]);
        NSLog(@"%@", [array valueForKeyPath:@"@max.age"]);
        NSLog(@"%@", [array valueForKeyPath:@"@min.age"]);
        NSLog(@"%@", [array valueForKeyPath:@"@avg.age"]);
        NSLog(@"%@", [array valueForKeyPath:@"@sum.age"]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值