进击的KFC:OC(八)属性、点语法、KVC
来源:互联网 发布:face gossip软件 编辑:程序博客网 时间:2024/05/14 21:50
⼀、属性
1.属性是Objective-C 2.0定义的语法,为实例变量提供了setter、getter⽅法的默认实现. 能在⼀定程度上简化程序代码,并且增强实例变量的访问安全性
2.属性的定义
属性的声明:使⽤@property声明属性 例如:@property NSString *name; 相当于@interface中声明了两个⽅法(setter、getter): - (void)setName:(NSString *)name; - (NSString *)name
3.属性的实现
属性的实现:使⽤@synthesize实现属性 例如:@synthesize name = _name; 相当于@implementation实现了setter、getter - (void)setName:(NSString *)name {…} - (NSString *)name {…}
⼆、属性的属性
1.Objective-C提供属性的⺫的是为了简化程序员编码.
为属性提供了⼀些关键字⽤以控制setter、getter的实现细节.
这些关键字我们称为属性的属性(attribute)
⼀共3⼤类attribute。
第⼀类:读写性控制(readonly、readwrite、setter、getter) readonly,告诉编译器,只声明getter⽅法(⽆setter⽅法)。例如:@property(readonly)NSString *name;//等价于 - (NSString *)name; readwrite,告诉编译器,既声明setter⼜声明getter。例如: @property(readwrite)NSString *name;//等价于 - (NSString *)name; - (void)setName:(NSString *)name;readwrite是读写性控制的默认设置。第⼆类:原⼦性控制(nonatomic、atomic) atomic。setter、getter⽅法在多线程访问下是绝对安全的,即 setter、getter内部做了多线程访问处理。原⼦性控制的默认设置是atomic nonatomic。setter、getter⽅法内部不会做多线程访问处理,仅仅是普通的setter、getter⽅法. 程序开发过程中,setter、getter处处都在⽤,如果使⽤atomic,需要不断的对setter、getter加锁解锁以保证线程访问安全,会很占⽤系统资源,降低系统性能。通常设置为nonatomic,某些属性需要线程安全的时候,才定义为atomic。例如:@property (readwrite,nonatomic)NSString *name;//等价于- (NSString *)name;- (void)setName:(NSString *)name;第三类:语义设置(assign、retain、copy)assign:setter,getter内部实现是直接赋值。// 如果属性是⾮对象类型(⽐如int,float等)属性的语义设置使⽤assign。例如:@property(nonatomic,assign)NSString *name;- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}retain:setter、getter的内部实现会做内存优化。// 如果属性是对象类型(⽐如NSStrng、NSArray等)属性的语义设置使⽤retain。例如:@property(nonatomic,retain)NSString *name;- (void)setName:(NSString *)name{ if(_name != name){ [_name release]; _name = [name retain]; }}- (NSString *)name{ return [[_name retain]autorelease];}copy:setter、getter的内部实现也会做内存优化。// 如果属性是对象类型并且想得到参数的copy,使⽤copy关键字。例如:@property(nonatomic,copy)NSString *name;- (void)setName:(NSString *)name{ if(_name != name){ [_name release]; _name = [name copy]; }}- (NSString *)name{ return [[_name retain]autorelease];}
三、点语法
点语法是Objective-C 2.0中定义的语法格式。提供了⼀种便捷的
属性访问⽅式。
点语法的使⽤:
凡是符合系统默认setter、getter书写格式的⽅法都可以使⽤点语法。 例如:[person1 setName:@”zhangsan”];可以等价写成 person1.name = @”zhangsan”;。 NSString *name = [person1 name];可以等价写成NSString *name = person1.name; 属性是⼀对getter、setter⽅法,点语法是属性的另⼀种调⽤格式。 // 等号左边 调用的是set方法 赋值 // 等号右边 调用的是get方法 取值
四、KVC
KVC(Key-Value-Coding),键值编码,是⼀种间接访问实例变量的⽅法。
key:键,⽤于标识实例变量.
vlaue:实例变量对应的值.
修改值方法:
setValue:forKey:setValue:forKeyPath:setValue:forUndefinedKey:setValuesForKeysWithDictionary:// 传入的key的查找顺序:_key _iskey key iskey
获取值方法:
valueForKey:valueForKeyPath:valueForUndefinedKey:注意事项: 当key不存在的时候,会执⾏setValue:forUndefinedKey: 系统默认实现是抛出⼀个异常
总结:
属性是Objective-C的重要语法,属性是⼀组getter、setter⽅法,内
部对实例变量进⾏操作。
点语法是⼀种属性的另外⼀种调⽤格式。
KVC是⼀种间接访问实例变量的⽅法。
0 0
- 进击的KFC:OC(八)属性、点语法、KVC
- OC 属性的属性 点语法的使用 KVC
- OC基础:属性.点语法.KVC
- OC第八天 属性 点语法 KVC
- OC初期-08 属性,点语法,KVC
- 进击的KFC:OC(六)Block
- OC第八天 — 属性, 属性的属性, 点语法, KVC
- OC学习第八天_属性 属性的Attribute 点语法 KVC
- 随意细解:OC -- 属性、点语法、KVC
- 进击的KFC:OC(七)类的扩展
- 进击的KFC:OC(五): 字典、集、数组排序
- 进击的KFC:OC(第九天):内存管理初级
- 进击的KFC:OC(十)内存管理高级
- 进击的KFC: OC实现UICollectionViewCell自适应文字宽度
- 进击的KFC:UI(八)导航试图控制器,传值
- 08 属性 点语法 KVC
- OCday4 属性, 点语法, KVC
- OC04_属性,kvc,点语法
- 使用高德地图API开发定位插件
- 《leetCode》:Search for a Range
- swift 快速奔跑的兔几 本节的内容是:SpriteKit第一讲
- 包的作用
- 字典(NSDictionary)及可变字典(NSMutableDictionary)基础学习
- 进击的KFC:OC(八)属性、点语法、KVC
- nodejs中Unexpected identifier异常
- css样式大全
- 函数式编程扫盲篇
- 电容的充放电过程及应用
- Android-Uiautomator:setText输入速度
- 排序算法(一):直接插入排序
- VC中文件操作的几种方式(1,2)
- 天声人語 20151105 篠原一さん逝く