objective-c - 每个 ivar 都必须是一个属性吗?

我看到它在为 iOS 编码时到处都建议使用属性来访问实例变量,因为这对内存管理等有好处。

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

最佳答案

实际上没有必要为所有 ivars 声明属性。想到几点:

  • 如果一个 ivar 在对象的生命周期内只被分配一次,那么声明一个属性并不会真正获得任何好处。只需在 init 期间保留/复制/分配,然后在 dealloc 期间根据需要释放。
  • 如果要频繁更改 ivar,则声明属性并始终使用访问器将更容易避免内存管理错误。
  • 如果属性和 ivars 是私有(private)的,您可以在 .m 文件而不是 .h 文件的类扩展中声明属性。
  • 针对 iOS 4.0+ 时,如果定义属性并合成访问器,则根本不需要在 header 中声明 ivars。

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

https://stackoverflow.com/questions/5031230/

相关文章:

ios - IOHIDFamily 的神秘控制台错误

iphone - UIScrollView - 显示滚动条

ios - 协议(protocol)和委托(delegate)之间的区别?

ios - info.plist中的 "Application Requires iPhone En

objective-c - 获取最顶层的 UIViewController

objective-c - 添加/删除带有动画的 UITableViewCell?

objective-c - 通过索引访问 NSMutableDictionary 中的对象

ios - 以编程方式获取应用程序支持文件夹的路径

ios - 子类化时混合objective-c和swift

ios - 有没有办法在用户已经在 iOS 上拒绝相机访问权限后向他们询问?