【问题标题】:properties synthesize and iVars属性综合和 iVars
【发布时间】:2013-01-31 14:57:52
【问题描述】:

免责声明:我对 Objective-C 很陌生

我有几个与@property 和@synthesize 相关的问题。

假设我有财产

@property (strong, nonatomic) NSString *name;

1- 我知道在 Xcode 4.4+ 上,您可以跳过对属性执行 @synthesize 的操作,因为它们是自动完成的。所以我假设生成的iVar应该和属性名一样吧?一般来说,如果我这样做@synthesize name;iVar 将与属性名称相同?

2- 我知道@synthesize name = _name; 在我手动声明了一个名为_name 的私有变量并且我想让编译器将它用作我的属性的iVar 时使用。 我需要知道,如果我这样做 @synthesize name = _name; 没有实际上声明了一个私有变量会发生什么。

提前谢谢你。

【问题讨论】:

标签: objective-c properties ivar synthesize


【解决方案1】:
  1. 如果我没记错的话,生成的默认 iVar 以下划线开头。即:属性name 的默认iVar 将是_name
  2. 将为属性name 生成iVar _name。当@synthesize 为您完成工作时,无需手动创建任何 iVar,但如果您确实想手动添加它们不会有任何问题。

【讨论】:

  • 是的,在 Xcode 4.4+ 中你只需要@property (nonatomic, strong) NSString *name;。这将为您设置属性、访问器和 ivars。唯一需要实际使用 @synthesize 的情况是同时覆盖 getter 和 setter。
  • 据我所知,生成的iVar与属性同名,两者的区别是如果你使用.符号来访问它。即myVar = valueself.myVar = value的区别
  • @DanF 生成的 ivar 与前面带有下划线的属性名称相同。即self.someValue == _someValue
  • 在我的代码中,如果我尝试访问被命名为合成属性之一且前面带有下划线的内容,则会收到无法识别的标识符错误
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 2012-01-18
  • 2015-06-14
  • 2012-06-23
相关资源
最近更新 更多