Objc-C 知识点回顾 九 Property
来源:互联网 发布:星图软件 编辑:程序博客网 时间:2024/05/16 09:27
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; 其他位置, 调用getter4.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
- Objc-C 知识点回顾 九 Property
- Objc-C 知识点回顾 三 继承
- Objc-C 知识点回顾 七 block
- Objc-C 知识点回顾 十 MemoryManagement
- Objc-C 知识点回顾 四 NSString 、NSMutableString
- Objc-C 知识点回顾 五 NSArray、NSMutableArray
- Objc-C 知识点回顾 六 字典、集合
- Objc-C 知识点回顾 八 NSDate、 Extension、Category、Delegate
- Objc-C 知识点回顾 一 类、 对象
- Objc-C 知识点回顾 二 实例变量 、方法
- Effective Objc : Object-C 中 @property 详解
- C语言知识点回顾
- 课后知识点回顾九 集合1
- C语言重要知识点回顾
- Android视频学习(九):内容提供者和知识点回顾
- C语言回顾 九 高级指针
- 知识点回顾
- 知识点回顾
- jstl标签库fn函数使用
- CUDA入门(5):CUDA C 简介
- Intellij搭建spark开发环境
- 印象笔记常用快捷键
- Swift----单列的正确编写方式
- Objc-C 知识点回顾 九 Property
- chown命令
- 采用cmd打印输出调试信息
- 数据结构C++语言描述专题系列 (三) 队列
- Java双缓冲
- vb.net下打印清单示例(连续纸和固定纸张打印)
- The method getTabHost() is undefined问题解决
- git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支
- opencv-Mat