2010-06-04 59 views
0

我有一个自定义模型类与NSMutableData伊娃将被自定义NSOperation子类访问(使用N​​SOperationQueue)。我想我可以保证通过使用依赖关系从多个NSOperations线程安全地访问ivar,并且我可以保证我不会通过等待Q完成所有操作而从其他代码(比如我的主应用程序线程)访问ivar 。使用NSOperationQueue(iPhone)时模型类中的非原子属性?

我应该使用非原子性质规范还是保持原子性?对性能有重大影响吗?

回答

1

安德鲁,是否重要取决于你在做什么。如果您的操作正在将电影上传到YouTube,并且每次操作都需要读取一次数据,那么它没有丝毫差别 - 只需将其保留为原子。

否则,您需要配置文件以查看它是否有意义。如果你确定(你没有确定),NSMutableData将永远不会同时从两个或多个线程访问(不管你是这样做,锁定,屏障还是等待),那么你不需要它是原子的。

0

不成熟的优化是万恶之源。

让它保持原子状态,直到您确定存在性能问题。

+0

我想你不知道你做的是一切邪恶的根源。 – Ricardo 2012-01-19 16:05:22

0

如果它是一个可变对象,那么你最大的敌人是并发变异,而不是不一致的属性访问。

+0

是的,我同意 - 谢谢澄清!这就是我想要保护的:并发突变。那么......你知道ObjC的那些成语吗? – 2010-06-10 21:23:58

+0

一般的答案是使属性不可变,并提供同步方法(或操作队列)作为进行更改的唯一方法。在你的情况下如何工作真的取决于你自己的应用程序的需求。 – 2010-06-11 12:15:32