ios - 为什么有的书说在初始化方法和dealloc方法总是应该通过实例变量来读写数据?
我想大声告诉你
我想大声告诉你 2017-05-17 10:05:31
[iOS讨论组]

Effiective objecttive -c2.0 这本书说 在初始化方法和dealloc方法总是应该通过实例变量来读写数据,看了半天没看懂原因到底是为什么?有看这本书的吗?

我想大声告诉你
我想大声告诉你

全部回复(1)
黄舟

书中不是讲的很清楚吗:

  • _name = @"Jack" 不经过setter的消息发送,直接为变量赋值,速度快。

  • 对于以下的 name 属性:

@property (nonatomic, copy) NSString *name;

直接赋值是: _name = @"Jack"; ,通过 self.name = @"Jack" 其实等同于 _name = @"Jack".copy;

  • self.name = @"Jack" 会触发KVO,_name = @"Jack" 不会

  • self.name = @"Jack" 可以在 setter 方法中进行断点调试,每次赋值你都知道。

所以有一种合理折中方案就是,读取数据的时候用 NSString *str = _name,赋值用 self.name = @"Jack"

另外需要注意的是子类可能复写setter方法,用 self.name = @"Jack"可能不等同于 _name = @"Jack".copy

没有明白你哪里不清楚,只能用我的思路简单描述一下。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号