博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective Objective-C 2.0 — 第七条:在对象内部尽量直接访问实例变量
阅读量:6208 次
发布时间:2019-06-21

本文共 1282 字,大约阅读时间需要 4 分钟。

直接访问实例变量,不经过”方法派发“(method dispatch) 速度快。

直接访问实例变量,不会调用其“设置方法”,这就绕过了为相关属性所定义的“内存管理语义”。

直接访问实例变量,不会触发“键值观测”(Key-Value Observing, KVO)通知。

    (KVO,一种通知机制,当某对象属性改变时,可通知其他对象。)

通过属性来访问有助于排查与之相关的错误,因为可以给“获取方法” or、and “设置方法” 中新增断点(breakpoint),监控该属性的调用者及其访问时机。

 

优化方案: 在对象内部读取数据时,应该通过实例变量来读,而写入数据时,则应通过属性(即setter方法)来写入。

在初始化方法及dealloc方法中,总是应该直接通过实例变量 来书写数据。

使用惰性初始化技术配置某份数据,需要通过属性来读取数据。

@interface EOCPerson : NSObject@property (nonatomic, copy) NSString *firstName;@property (nonatomic, copy) NSString *lastName;- (NSString *)fullName;- (void)setFullName:(NSString *) fullName;@end//实现方法// 使用“点语法”,获取方法- (NSString *)fullName{    return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];}//设置方法- (void) setFullName:(NSString *)fullName{    NSArray *components = [fullName componentsSeparatedByStirng:@" "];    self.firstName = [components objectAtIndex:0];    self.lastName = [components objectAtIndex:1];}//如果不经由存取方法,而是直接访问实例变量- (NSString *) fullName{    return [NSStringstringWithFormat:@"%@ %@", _firstName, _lastName];}- (void) setFullName:(NSString *)fullName{    NSArray *components = [fullName componentsSeparatedByStirng:@" "];    _firstName = [components objectAtIndex:0];    _lastName = [components objectAtIndex:1];}

 

转载于:https://www.cnblogs.com/IDRI/p/5032225.html

你可能感兴趣的文章
java实现冒泡排序
查看>>
C#中[] 、List、Array、ArrayList等数据结构的差异简述
查看>>
memcached线程模型
查看>>
Automatic Reference Counting
查看>>
熟练掌握HDFS的Shell访问
查看>>
7月份英语测试题
查看>>
几种浏览器内核(百度百科)
查看>>
leetcode | Text Justification
查看>>
36、IO流概述和分类
查看>>
python知识点总结---函数
查看>>
多线程,线程池与BeginInvoke()
查看>>
【JavaScript 】for 循环进化史
查看>>
不背公式快速计算IP地址掩码---游码法
查看>>
ubuntu 14.04 安装torch及编译环境zbstudio
查看>>
JSONArray的学习理解
查看>>
闰年判断
查看>>
接口测试基础
查看>>
五种WordPress防止垃圾评论方法-过滤垃圾评论提高WP运行效率
查看>>
form表单的两种提交方式,submit和button的用法
查看>>
php采集远程文章简单类
查看>>