Objective c 调试是在Objective C程序中使用IVAR有意义的唯一情况吗?

Objective c 调试是在Objective C程序中使用IVAR有意义的唯一情况吗?,objective-c,ios,macos,Objective C,Ios,Macos,在开发的最初几天,我开始在我编写的每个程序中创建实例变量。但在了解了房地产的力量之后,我觉得我们不需要使用IVAR 但有时当我不得不调试代码时,我发现调试自定义实体的值很困难,因为缺少IVAR 现在,我计划在所有自定义接口实现上使用IVAR 请确认我所做的是否是一个良好的实践,是否有权衡 是否还有其他原因需要在目标C中使用IVAR?您不是通过使用属性来“不使用”IVAR(大多数情况下)。您只是让编译器为您生成它们。我经常使用私有和受保护的IVAR来处理我不想暴露在无关类(标志等)之外的事情。属性

在开发的最初几天,我开始在我编写的每个程序中创建实例变量。但在了解了房地产的力量之后,我觉得我们不需要使用IVAR

但有时当我不得不调试代码时,我发现调试自定义实体的值很困难,因为缺少IVAR

现在,我计划在所有自定义接口实现上使用IVAR

请确认我所做的是否是一个良好的实践,是否有权衡


是否还有其他原因需要在目标C中使用IVAR?

您不是通过使用属性来“不使用”IVAR(大多数情况下)。您只是让编译器为您生成它们。我经常使用私有和受保护的IVAR来处理我不想暴露在无关类(标志等)之外的事情。属性只是与定义的getter(可能还有setter)耦合的ivar。我不明白您认为通过避免显式IVAR获得了什么。

当您声明属性和@synthesis语句时,编译器将注意在访问器方法中创建实例变量。请参阅此链接以了解更多信息首先,除非您有一些动态运行时的东西(例如使用
NSManagedObject
的子类)或者该属性完全由自定义getter/setter实现,否则您的属性将始终由实例变量支持

合成属性时,将为您创建一个实例变量。您可以在
@interface{}
声明中显式声明实例变量,但不再需要这样做


通常,您应该更喜欢使用属性而不是实例变量,但在某些情况下,您必须直接访问实例变量。例如,
init
方法的最佳实践是避免使用属性访问器来设置对象,因为子类可以覆盖属性访问器,并在对象完全初始化之前尝试执行操作。自定义getter/setter方法也需要直接使用实例变量。

Haha。我等了一上午。版主访问!我没有通过避免明确的IVAR获得任何东西。只保存了几行代码