【问题标题】:Why give a property both readonly and assign?为什么要同时赋予一个属性 readonly 和 assign ?
【发布时间】:2012-03-01 11:58:51
【问题描述】:

如果assign是一个setter,而一个属性是readonly,那么它不会做任何设置,那么为什么要使用assign呢?

我从Apple docs on class extensions. In this page, 得到这个我明白为什么你想要一个公共的只读属性,然后让它私有地读写,但是为什么不从公共@interface 中省略assign 并将它包含在仅类扩展?

【问题讨论】:

标签: objective-c


【解决方案1】:

如果您多次声明@property(通常是因为您在头文件中声明公共readonly 属性,并在.m 中的匿名类别中声明readwrite 属性),内存管理方案必须匹配。

如果你的 .m 中有这个:

@property (assign, readwrite) NSObject *foo;

然后你需要在你的标题中,assign 是强制性的:

@property (assign, readonly) NSObject *foo;

【讨论】:

  • 另一种有用的情况是@protocol 将属性定义为只读,但您的实现想要的是读写:)
【解决方案2】:

如果只留下(nonatomic),编译器会自动将第二个参数设置为assign

【讨论】:

  • 为什么编译器在设置为readonly 时会假定assign 或任何其他setter?
  • 其实我找到了另一个很好的答案:stackoverflow.com/questions/3894888/…
  • 您链接的页面中的示例提供了供内部(仅限类)使用的 getter 和 setter,而 readonly 参数对外部使用有效。我之前没听懂你的问题。
猜你喜欢
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多