我的iOS学习历程 - OC第八天
来源:互联网 发布:电脑桌面文件分类软件 编辑:程序博客网 时间:2024/06/16 11:42
今天我们学的是1.属性,2.属性的属性,3.点语法,4.KVC
1.属性
声明属性的关键字
@property
如果你的实例变量_name那么你声明属性时把下划线去掉就可以
声明成属性代表系统默认帮我们实现了 setter和getter方法的声明
<span style="font-size:18px;">@property NSString *name;</span>实现的方法是:
<span style="font-size:18px;">@synthesize name = _name;</span>现在默认是不需要实现的,写完声明后就可以使用setter,getter方法
2.属性的属性
1.读写类属性
readonly 只读(系统就不会默认生成set方法了)
readwrite 读写(如果什么都不写默认就是可读写)
setter,getter 设置指定set,get方法默认生成方法名
2.原子性控制
nonatomic 没有实现多线程同时访问一个变量的操作保护
atomic (如果什么都不写默认的)添加了对多线程的保护操作(一个人上厕所故事)虽然安全,但是大量的耗费系统资源,并且这些资源是不必要浪费的,所以一般使用nonatomic
3.语义性设置
注意:创建工程默认是ARC状态(自动管理内存)
手动管理内存 MRC
assign(基本数据类型) retain(对象) copy(对象,且必须遵守NSCopying这个协议)
( 1 ). assign set,get方法的实现是直接赋值一般用来声明基本数据类型时候使用
( 2 ). retain set,get方法的实现内部实现了对内存管理的优化对象类型声明为ratain
( 3 ). copy 与retain一样但是声明成copy的话有一个条件必须遵守NSCopying这个协议,并且实现该协议的方法
实例:
<span style="font-size:18px;">@property(nonatomic,retain, setter=aa:, getter=bb) NSString *name;</span>在我们平常的编程中,基本上用的形式都是:
<span style="font-size:18px;">@property(nonatomic, retain) NSString *gender;</span>
在我们填retain的时候,方法的实现是这样的:
<span style="font-size:18px;">-(void)setName:(NSString *)name{ if (_name != name) { [_name release]; _name = [name retain]; }}</span>默认也是不用写的
3.点语法
点语法 :提供了一种快捷的访问属性的一种方法,快捷调用set get方式
<span style="font-size:18px;">NSLog(@"%@",s1.name); // 相当于调用了get方法</span>
<span style="font-size:18px;">s1.name = @"Paul"; // 相当于调用了set方法</span>
4.KVC
KVC(Key-Value-Coding),键值编码,是⼀种间接访问实例变量的⽅法。
在使用KVC的时候,要重写forUndefinedKey,setNilValueForKey方法,便于找到错误
[s1 setValue:@"allen" forKey:@"name"];// 找不到就调用forUndefinedKey
<span style="font-size:18px;">[s1 setValue:nil forKey:@"age"];// 空就调用setNilValueForKey</span>
( 1 )复合:本类中有其他类的一个对象作为实例变量
forKeyPath 这个方法相当于跨一级去间接访问属性是访问本类中属性的属性通过这个方法去访问的话需要传入一个路径,填这个路径需要一级一级的去查找(p为person类 person类有一个Phone类的实例变量)
<span style="font-size:18px;"> Phone *p1 = [[Phone alloc]init]; p.p1 = p1; p.p1.name = @"6s"; [p setValue:@"6p" forKeyPath:@"p1.name"]; NSLog(@"%@",p1.name);</span>
( 2 )通过字典去,间接赋值一个对象
<span style="font-size:18px;">NSDictionary *dic = @{@"name":@"zhuang", @"sex":@"男"}; [s1 setValuesForKeysWithDictionary:dic]; NSLog(@"姓名:%@ 性别:%@",s1.name,s1.sex);</span>( 3 )间接取值
<span style="font-size:18px;">NSLog(@"%@",[s1 valueForKey:@"name"]);</span>
- 我的iOS学习历程 - OC第八天
- 我的iOS学习历程 - OC第一天
- 我的iOS学习历程 - OC第三天
- 我的iOS学习历程 - OC第五天
- 我的iOS学习历程 - OC第七天
- 我的iOS学习历程 - OC第九天
- 学习iOS的第八天
- 我的iOS学习历程 - OC第二天
- 我的iOS学习历程 - OC第四天
- 我的iOS学习历程 - OC第六天
- 我的iOS学习历程 - OC第十天
- 学习的第八天
- 我的caffe学习之路<第八天>
- OC第八天
- OC第八天
- OC第八天:属性
- 我的iOS学习历程 - UITextField UIButton
- 我的iOS学习历程 - 自定义视图
- Unity 中的gameObject 和 transform
- Java局域网聊天系统(服务器客户端一对一)
- cloudstack VM的高可用(HighAvailability)
- zoj Burn the Linked Camp(差分约束)
- POJ1679-The Unique MST
- 我的iOS学习历程 - OC第八天
- 高效开发 Android App 的 10 个建议
- NOIP2014部分题解
- iOS--错误集锦--UI控件不显示原因之一
- Unity ReorderableList 可重新排序的列表框使用
- 利用小波融合对由聚焦失败导致的图像模糊进行修复
- 检测一个数组能否表示二叉搜索树(BST)的先序遍历
- GCD介绍与总结
- 黑马程序员_简易版IE浏览器 2.0