首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于readwrite属性的问题

关于readwrite属性的问题
EN

Stack Overflow用户
提问于 2011-07-04 22:39:15
回答 2查看 105关注 0票数 1

我喜欢readwrite属性的一件事是,你可以“免费”获得KVO遵从性,所以我倾向于在属性上使用它,即使它们只在属性所属的对象中写入。另一方面,我理解只有当一个属性被其他对象写入时,它才应该被设置为readwrite。那么,我是否应该使用readwrite,即使我只从self调用setter:

代码语言:javascript
复制
[self setFoo:bar];

另一种选择(我认为)是使用:

代码语言:javascript
复制
[self willChangeValueForKey:@"foo"];
foo = bar;
[self didChangeValueForKey:@"foo"];

这是额外的两行代码,每当我想要更改foo时,我都必须编写代码。哪种更好些呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-05 00:39:06

您可以在公共接口中声明属性readonly,然后在实现文件的类扩展中将其提升为readwrite

Foo.h:

代码语言:javascript
复制
@interface Foo: NSObject
@property (readonly) NSString *frob;
@end

Foo.m:

代码语言:javascript
复制
@interface Foo ()
@property (readwrite) NSString *frob;
@end

@implementation Foo
@synthesize frob;

// Methods in Foo.m can now use foo.frob = @"whatever";
@end
票数 3
EN

Stack Overflow用户

发布于 2011-07-04 22:47:13

在.h中

代码语言:javascript
复制
   @property(nonatomic,readwrite,retain)NSString *foo;

然后

在.m中

代码语言:javascript
复制
  @synthesize foo;

然后在任何地方使用,比如

代码语言:javascript
复制
  self.foo=@"madhu";

代码语言:javascript
复制
  self.foo=@"mike";

但是如果你像上面那样合成,那么你必须总是使用like

带点的self

每次更改字符串时

代码语言:javascript
复制
   it will automatically release the older object then retain the new one.so no pain to take care of old one for release and no pain for retain the new one.

我觉得这样更好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6572907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档