我有一个带有 NSMutableData ivar 的自定义模型类,将由自定义 NSOperation 子类(使用 NSOperationQueue)访问。我认为我可以通过使用依赖项来保证从多个 NSOperations 对 ivar 的线程安全访问,并且我可以通过等待 Q 完成所有操作来保证我不会从其他代码(比如我的主应用程序线程)访问 ivar .
我应该使用非原子属性规范,还是让它保持原子性?对性能有显着影响吗?
我有一个带有 NSMutableData ivar 的自定义模型类,将由自定义 NSOperation 子类(使用 NSOperationQueue)访问。我认为我可以通过使用依赖项来保证从多个 NSOperations 对 ivar 的线程安全访问,并且我可以通过等待 Q 完成所有操作来保证我不会从其他代码(比如我的主应用程序线程)访问 ivar .
我应该使用非原子属性规范,还是让它保持原子性?对性能有显着影响吗?
安德鲁,它是否重要取决于你在做什么。如果您的操作正在将电影上传到 youtube,并且每个操作都需要读取一次数据,那么它不会产生丝毫差异 - 只需将其保留为原子操作即可。
否则,您需要分析以查看它是否重要。如果您确定(您听起来不太确定)NSMutableData 永远不会同时从两个或多个线程访问(但是您这样做,锁定,屏障或只是等待),那么您不需要它是原子的。
Premature optimisation is the root of all evil.
Leave it atomic until you find out for sure that there is a performance issue.
If it's a mutable object then your biggest enemy is concurrent mutation, not inconsistent property access.