我看到,在为iOS编写代码时,到处都建议使用属性来访问实例变量,因为这有助于内存管理等.

这个建议对我不太合适.我发现使用属性而不是普通的旧IVAR需要太多的代码,如果你对内存管理感到满意,我就看不到它的好处.真的那么重要吗?你管理实例变量的方法是什么?

推荐答案

并不一定要为所有IVAR声明属性.我想到了几点:

  • 如果一个ivar在对象的生命周期内只被分配一次,那么通过声明一个属性,你不会真正获得任何东西.只需在init年期间保留/复制/分配,然后在dealloc年期间根据需要发布.
  • 如果ivar要频繁更改,那么声明属性并始终使用访问器将更容易避免内存管理错误.
  • 可以在中的类扩展中声明属性.m文件而不是文件.h文件,如果属性和IVAR是私有的.
  • 当以iOS 4.0+为目标时,如果定义属性并合成访问器,则根本不需要在头中声明IVAR.

所以我通常使用属性,但对于像NSMutableArray这样的东西,一个对象在init期间分配,并用来保存一堆whatever,我将使用一个普通的旧ivar,因为我永远不会重新分配ivar.

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

Objective-C NSMutableArray 在枚举时发生了变异?

uipageviewcontroller 类在设置多个视图控制器时崩溃

如何使用 UIStepper

自构建预编译头后文件已被修改

如何将 NSDate 转换为今天、昨天、一周前、一个月前、一年前等相对格式?

iOS7过度导航栏按钮填充

Container View 好像有 UINavigationBar 一样被下推?

关于如何将项目从 UITableView 拖放到 UITableView 的教程

Objective-C 的文档生成器?

判断 NSString 是否只是由空格组成

UICollectionView 单元格 Select 和单元格重用

两个 NSDate 对象之间的区别 - 结果也是一个 NSDate

如何检测 NSString 是否为空?

检测 UITableView 滚动

我可以在 Objective-C switch 语句中声明变量吗?

Objective-c - CABasicAnimation 在动画后应用更改?

CALayer:仅在一侧添加边框

将 Xcode 组创建为文件系统文件夹的工作流程

无法更改 UILabel 文本 colored颜色