iOS -- Effective Objective-C 阅读笔记 (4)
1: 在 对象内部 尽量 直接访问 实例变量
在对象之外访问实例变量时, 总是应该通过属性来访问, 然而在对象内部, 在读取实例变量的时候尽量采用 直接访问的形式, 而在设置实例变量的时候通过属性来做, 例子如下:
@interface EOCPerson : NSObject
@property (nonatomic, copy) NSString * firstName;
@prpperty (nonatomic, copy) NSString* lastName;
- (NSString*)fullName;
- (void)setFullName:(NSString*)fullName;
@end
fullName 和 setFullName 可以这样来实现
- (NSString*)fullName{
return [NSString stringWithFormat:@""%@ %@",self.firstName,self.lastName];
}
- (void)setFullName:(NSString *)fulleName{
NSArray * components = [fullName componentsSeparatedByString:@" "];
self.firstName = [components objectAtIndex:0];
self.lastname = [components objectAtIndex:1];
}
在上述 fullName 的获取方法 和 设置方法, 我们使用 '点语法', 通过存取方法来访问实例变量, 假设重写 这两个方法, 不经由存取方法, 而是直接访问实例变量.
- (NSString*)fullName{
return [NSString stringWithFormat:@""%@ %@", _firstName, _lastName];
}
- (void)setFullName:(NSString *)fulleName{
NSArray * components = [fullName componentsSeparatedByString:@" "];
_firstName = [components objectAtIndex:0];
_lastname = [components objectAtIndex:1];
}
// 这两种方法有几个区别
由于不经过 OC 的 '方法派发' , 步骤, 所以直接访问实例变量的速度是当然比较快的, 在这种情况下, 编译器所产生的代码会直接访问保存实例变量的那块内存
直接访问实例变量, 不会调用其 '设置方法', 这就绕过了为相关属性所定义的 '内存管理语义' (nontamic, strong , copy 等),
如果直接访问实例变量, 那么不会触发 '键值观察' (KVO) 通知,这样是否会产生问题, 取决于具体的对象行为
通过属性来访问有助于排查与之相关的错误, 因为可以给 getter 和 setter 方法新增 断点, 监控该属性的调用集齐访问时机
// 有一个折中的处理方案, 在写入实例变量的时候, 通过其 '设置方法' 来做, 而在读取实例变量的时候, 则直接访问,
此方法既能提高读取操作的速度, 又能控制对属性的写入 操作, 之所以要通过 '设置方法' 来写入实例变量, 其首要原因在于. 这样做能够确保相关属性的 '内存管理语义' 得意贯彻
但是,选用这种,需要注意几个问题
(1), 在初始化方法中应该如何设置属性值, 在各种情况下总是应该直接访问实例变量, 因为子类可能会 '覆写' 设置方法
(2) 另一个问题是 '惰性初始化', (即懒加载), 在这种情况下, 必须通过 getter 来访问属性, 否则实例变量就永远不会初始化, , 如果使用了 '懒加载', 就必须通过存取方法来访问属性
总结:
在对象内部读取数据时, 应该直接通过实例变量来读, 而写入数据时, 则应该通过 属性来写,
在初始化方法以及 dealloc 方法中, 总是应该直接通过实例变量来读写数据
在使用懒加载来初始化配置数据时, 需要通过属性来读取数据
iOS -- Effective Objective-C 阅读笔记 (4)的更多相关文章
- iOS Testing with Xcode 阅读笔记
官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...
- Effective Java, 3e阅读笔记一
引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...
- QCon 2015 阅读笔记 - 其他精选主题
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...
- QCon 2015 阅读笔记 - 移动开发最佳实践
所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...
- SDL源码阅读笔记(1) 基本模块
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...
- 《STL源代码剖析》---stl_deque.h阅读笔记(2)
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- 【apache】No input file specified
默认的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]规则在apache fastcgi模式下会导致No input file specified. 修改成 Re ...
- Pyspark 使用 Spark Udf 的一些经验
起初开始写一些 udf 的时候感觉有一些奇怪,在 spark 的计算中,一般通过转换(Transformation) 在不触发计算(Action) 的情况下就行一些预处理.udf 就是这样一个好用的东 ...
- Django初印象之视图(view)
一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...
- iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制
2. 自定义 线的图片,只需要在 rendererForOverlay 方法中,设置: polylineRenderer.strokeImage = [UIImage imageNamed:@&quo ...
- 虚拟机iso整理
供个人备用,随缘补充 ubuntu-16.04.6-desktop-amd64.iso 资源: https://pan.baidu.com/s/1ZR_5jgzNsGeOrkE6hAqxEA 提取码: ...
- java 从指定行读文件,执行系统命令
import java.util.*; import java.io.*; public class Example { public static void main(String[] args){ ...
- [bilibili]弹幕屏蔽列表
<filters> <item enabled="true">t=定单身</item> <item enabled="true& ...
- [WC2007]剪刀石头布(最大流)
洛古 一句话题意:给定一张图,每两点之间有一条有向边或无向边,把所有无向边定向,使图中三元环个数尽量多 因为原图是一个完全图,假设图中任意三点都能构成三元环,那么途中三元环的个数为:\(\binom{ ...
- Linux下安装部署Samba共享盘的操作手册
简述 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的 ...
- 美化博客CSS
title: 美化博客CSS date: 2019/01/19 14:28:59 --- 美化博客CSS 可以去这里看下好看的样式 修改下文档的css,博客园是在页面定制CSS代码,我这里修改了下标题 ...