[TwistedFate]属性property
来源:互联网 发布:mac地址ip地质作用 编辑:程序博客网 时间:2024/06/10 06:36
属性property
声明
如果你的实例变量是_name,那么你生成属性时把下划线去掉可以
@property (retain, nonatomic) NSString *name;
默认属性实现:关键字@synthesize
又称合成set get方法,相当于实现set get方法
@synthesize name = _name;
等号前面代表声明属性的名称,等号后面代表要赋值成员变量的名称
属性的属性
读写类属性
- readonly 只读(系统就不会默认生成set方法)
- readwrite 读写(缺省 系统默认为可读写)
- setter 设置指定的setter方法(方法名) 默认生成方法名
@property (readwrite, setter = aa:, getter = bb, retain) NSString *name;
- getter设置指定 get方法 默认生成的方法名(BOOL类型一般用到)
@property (getter = isOpening)BOOL opening;
原子性控制
- nonatomic 没有实现多线程同时访问一个变量操作保护
- atomic (缺省 默认)添加对多线程的保护操作 虽然安全 但是大量耗费系统资源 并且这些资源是不必要浪费的 所以一般使用nonatomic
语义性设置
注意:创建工程 默认是ARC状态(自动管理内存)
手动管理内存 MRC 引用计数管理(下一章有介绍)
- assign:set和get方法的实现 是直接赋值的 一般用于基本类型
- retain:内部set get方法的实现 内部实现了对内存管理的优化 一般用于对象类型
// set方法和get方法的完整实现- (void)setName:(NSString *)name{ if (_name != name) { [_name release]; _name = [name retain]; }}- (NSString *)name{ return [[_name retain] autorelease];}
- copy:与retain一样 但是必须遵守NSCopying协议的对象类型 并且实现其方法
@property (nonatomic, copy) NSString *sex;
- (void)setSex:(NSString *)sex{ if(_sex != sex) [_sex release]; _sex = [sex copy];}- (NSString *)sex{ return [[sex retain] autorelease];}
点语法
点语法提供了一个快捷的访问属性方式
实质就是快捷调用了set get方法
等号左边 调用是set方法;等号右边调用的get方法
KVC键值码
间接访问属性的方法
创建一个 Student对象 进行赋值 取值
setValue:forKey:
[stu setValue:@"king" forKey:@"name"];// NSInteger类型需要转化为NSNmuber类型NSNumber *num = [NSNumber numberWithInt:18];[stu setValue:num forUndefinedKey:@"age"];[stu setValue:@18 forKey:@"age"];[stu setValue:nil forKey:@"age"];
传入key的查找顺序
传入key查找顺序: _key _iskey key iskey
setValue:forKeyPath:
[stu setValue:@"htc" forKeyPath:@"phone.name"];
forKeyPath 这个方法 相当于 跨一级区间接访问属性 是访问本类中属性的属性 通过这个方法去访问的话 需要传入一个路径,填入这个路径 一级一级的进行查找
setValue:forUndefinedKey:
间接赋值的保护方法
赋值的时候key填错了
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ // 如果你使用间接访问的方法 访问属性的话 需要重写这个方法 防止在抛出异常的时候调用这个方法的时候没有 而产生崩溃}NSLog(@"%@ %@",value, key);// 捕获间接访问属性时 填错的key 和 value// 如果使用间接访问 那么必须实现这个方法
setValuesForKeysWithDictionary:
// 通过一个字典去间接赋值 一个对象// 一个字典 完成赋值对象NSDictionary *dic = @{@"name":@"king",@"sex":@"男"};[stu setValuesForKeysWithDictionary:dic]; // 从网上请求
valueForUndefinedKey:
取值的时候key填错了调用这个方法
setNilValueForKey:(NSString *)key
setNilValueForKey:(NSString *)key{ // 捕获到value是空的 对应的key NSLog(@"%@",key);// if ([key isEqualToString:@"age"]) {// _age = 19;// }}
0 0
- [TwistedFate]属性property
- property(属性)
- @property 属性
- Property 属性
- property属性
- @property属性
- @property属性
- 属性(Property)
- 属性property
- J2ME Property属性表
- J2ME Property属性表
- Hibernate property-ref属性
- J2ME Property属性表
- J2ME Property属性表
- Qt属性setProperty & property
- android native property属性
- iphone的property属性
- property 属性讲解
- Linux 给用户及用户组分配权限以及对文件目录的操作
- [hadoop2.7.1]I/O之SequenceFile最新API编程实例(写入、读取)
- Xcode快捷键
- hdu--4455+ Substrings+2012杭州区域赛C题+DP
- Swift-- 方法
- [TwistedFate]属性property
- zoj 3891 K-hash(后缀自动机)
- hdoj2053(switch game
- Intent 传数据
- POJ 3009 dfs暴搜
- 外键约束和级联操作
- Java学习笔记(1):重载方法
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
- READING NOTE: Two-Stream Convolutional Networks for Action Recognition in Videos