OC基础知识 -- 属性
来源:互联网 发布:灵格斯for mac 编辑:程序博客网 时间:2024/05/29 15:56
属性
在类的.h中@interface中书写
@property (属性的属性) NSString *name;
表示定义了某个实例变量的setter和getter方法
属性的属性
读写性属性
readonly: 只读 (系统就不会生成setter方法了)
readwrite: 读写 (系统生成getter和setter方法, 相当于什么都不写)
setter: 设置指定setter方法 默认生成方法名 setter = 名字:
getter: 设置指定getter方法 默认生成方法名getter = 名字
原子性属性
nonatomic: 未对多线程同时访问一个变量进行操作保护
atomic: 对多线程同时访问一个变量进行了操作保护(但消耗了大量系统资源 并且这个资源是不必要浪费的 所以一般使用 nonatomic)
语义性属性
注意: 创建工程时 默认是ARC(auto Reference counting 自动管理内存) 需要先改成MRC 才能采用此属性
1) assign: setter 和 getter 方法的实现是直接赋值的 可以在基本数据类型和对象类型时使用 多用在基本数据类型中
2) retain: setter 和 getter 方法的实现需要进行重写 并且只用在对象类型时
3) copy: 必须遵守NSCopying协议 并且实现其方法
点语法
在设置好getter和setter方法后可以用点语法在main函数中进行调用 对象.属性
Student *stu1 = [[Student alloc] init];
stu1.name = @"long"; NSLog(@"%@",stu1.name);stu1.sex = @"nan";NSLog(@"%@",stu1.sex);stu1.age = 18;NSLog(@"%ld",stu1.age);
KVC
KVC =Key Value Coding 键值编码
键值编码是一种对属性的间接访问方式
Student *stu2 = [[Student alloc] init]; [stu2 setValue:@"long" forKey:@"name"]; NSLog(@"%@",stu2.name);
传入的Key的查找顺序: _key _isKey key isKey
为了防止传入的key没有属性与之匹配 需要在类的.m中写一个保护方法:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ 捕获间接访问属性时 填错的key和value}
为了防止value处填入nil值 需要在类的.m写一个保护方法
- (void)setNilValueForKey:(NSString *)key{ 捕获value是空的 对应的key}
如果类中有复合实例变量 可用setValue: forKeyPath: 方法
Phone *myphone = [[Phone alloc] init]; Student *stu1 = [[Student alloc] init]; stu1.phone = myphone; [stu1 setValue:@"myiphone" forKeyPath:@"phone.name"]; NSLog(@"%@",stu1.phone.name);
通过一个字典 去间接赋值 一个对象
NSDictionary *dic = @{@"name":@"long",@"sex":@"nan",@"age":@18,@"phone":myphone}; [stu1 setValuesForKeysWithDictionary:dic]; NSLog(@"姓名:%@ 性别:%@ 年龄:%ld 手机:%@",stu1.name, stu1.sex, stu1.age, stu1.phone.name);
间接取值
NSLog(@"%@",[stu1 valueForKey:@"name"]); [stu1 valueForUndefinedKey:@"name"];
- OC基础知识 -- 属性
- oc基础知识:属性、协议和分类
- Oc 基础知识。
- OC 基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- oc基础知识
- OC基础知识
- oc基础知识
- OC基础知识
- JFrame 的层次结构 及 背景设置说明
- 函数参数中带省略号的用法
- 统计list中重复项的个数
- 红尘牵绊,江湖儿女惹情长
- iOS夯实:内存管理
- OC基础知识 -- 属性
- Python:日志模块logging的应用
- Android NDK 是什么
- (转载)推荐几个非常实用的JQuery代码片段
- git中如何将已commit的代码commit到其它分支
- GeoServer发布影像 去黑边
- html name 和 id 区别
- 如何在xcode中上使用OC无缝调用Swift
- java自定义异常处理