Property和实例变量(Ivar)的最佳实践
来源:互联网 发布:2016淘宝开店流程 编辑:程序博客网 时间:2024/05/29 10:08
http://blog.sina.com.cn/s/blog_af73e7a70102uwmf.html
Property应该代表一个对象的状态,Getter应该没有外部影响(它们可以具有内部影响,例如caching,但那些应该是调用者不可见的)。
避免直接访问实例变量,使用accessor来代替。
在早期的ARC里,引起bug最常见的原因就是直接访问实例变量。开发者没有正确的retain和release实例变量,它们的应用就会崩溃或者内存泄露。由于ARC自动管理retain和release,一些开发者认为这个规则已经不再重要,但仍还有其他使用accessors的原因:
* KVO
也许使用accessor的最关键原因是,property可以被观察到。如果你不使用accessor,你需要在每次修改property里的实例变量时调用willChangeValueForKey: 和 didChangeValueForKey: ,而accessor会在需要时自动调用这些方法。
* Side effects
在setter里,你或者你的子类可能包含side effects。通知可能被传送、事件可能被注册到NSUndoManager里,你不应该绕过这些side effects,除非它是必要的。
* Lazy instantiation
如果一个property被lazily instantiated,必须使用accessor来确保它的正确初始化。
* Locking
如果引进locking到一个property里来管理多线程代码,直接访问实例变量将违背你的lock,并可能导致程序崩溃。
* Consistency
在看到前面的内容后,有人可能会说应该只使用accessor,但这使得代码很难维护。怀疑和解释每一个直接访问的实例变量,而不是记住哪些需要accessor哪些不需要,这样使得代码更容易审核、审阅和维护。Accessor,特别是synthesized accessors,已经在OC里被高度优化,它们值得使用。
这就是说,你不应该在这几个地方使用accessor:
* Accessor内部
显然,你不能在accessor内部使用自身。通常,你也不想在getter和setter内部使用它们自己(这可能创建无限循环),一个accessor应该访问其自身的实例变量。
* Dealloc
ARC极大地减少了dealloc,但它有时仍会出现。最好调用dealloc里的外部对象,该对象可能处于不一致的状态,并很可能造成混淆。
* Initialization
类似dealloc,对象可能在初始化过程中处于不一致状态,你不应该在此时销毁通知或者其他的side effects。
0 0
- Property和实例变量(Ivar)的最佳实践
- IOS开发中用@interface声明局部变量ivar和用@property声明属性的区别
- 变量和方法命名的最佳实践
- 变量和方法命名的最佳实践
- 方法和变量命名的最佳实践
- 属性(property)与成员变量(ivar)
- Object-c property 和 instance variable(ivar)
- 15 个变量和方法命名的最佳实践
- 关于OC的property 和 实例变量思考
- 属性(property)与成员变量(ivar)有什么区别?
- Android---服务的最佳实践(完整版的下载实例)
- js判断变量类型的最佳实践
- Runtime方法的使用—Method、Ivar、Property篇
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)
- 【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法
- Runtime之Ivar\Property\Method
- 关于objective-c中的property和实例变量
- [Swift 开发] 有效性检查
- Android历史版本总结
- openvpn记住用户名和密码,自动连接,避免隔一段时间自动断开的方法
- camel配置(1)
- 写好Java代码的30条经验总结
- Property和实例变量(Ivar)的最佳实践
- StringBuilder在高性能场景下的正确用法
- Rust 函数
- 云在青天水在瓶的博客开通啦,啦啦啦啦啦
- Struts2,mybatis,spring三大框架整合
- HashMap的设计原理和实现分析
- jQuery控制TR显示隐藏
- recvfrom的使用技能之第一次接受打印出的发送方IP地址总是0.0.0.0
- poj2524 Ubiquitous Religions