是否必须在Objective C中将Properties声明为Instance Variables?

时间:2011-02-16 10:16:34

标签: objective-c cocoa

  

可能重复:
  Properties and Instance Variables in Objective-C 2.0

如果我在头文件中创建一个@property并且@synthesize它,一切似乎都能正常工作,即使该项也没有被声明为实例变量。那么为什么我看到的所有示例代码都将项目声明为属性和实例变量?

2 个答案:

答案 0 :(得分:3)

如果您没有这样做,Objective-C 2.0中的@property命令将自动为您生成实例变量。这是为了限制您必须编写的重复代码量而引入的快捷方式。

仅在以下情况下声明iVar:

  • 出于某些高级原因需要直接访问它们(即您想自己管理内存)
  • 您希望子类能够访问iVars(如果您根本不指定它们,或者将它们指定为@private,则子类将被强制使用您的@synthesized访问者方法。)
  • 您希望自己的iVar名称与属性本身不同,在这种情况下使用@synthesize myProperty = myInstanceVariable_

注意:如果您计划在旧设备上运行代码或使用旧版本编译代码,则需要声明iVars。

答案 1 :(得分:2)

不,你不。 但是自动生成的方法将尝试访问实例变量,因此您必须为已添加的属性实现setter和getter。

使用以下链接查看Vladimirs评论: Properties and Instance Variables in Objective-C 2.0