1

我有一个用于复制语义的 Objective-C 类。

 @property (copy) ViewState* viewState;

它不是一成不变的,但是挂在ViewState实例上的所有东西都需要自己独特的副本。事实上,如果其他班级错误地尝试

 @property (strong) ViewState* viewState;

我们最终会崩溃。

我们如何强制或鼓励客户端类使用正确的语义?

例如,在 C++ 中,我们可以禁止赋值

 private:
 CPViewState* operator=(const CPViewState*) const;  // no implementation

但是我们不能在 Objective-C 中做到这一点。对于相反的情况,我们想要禁止复制,我们可以记录错误或从copyWithZone:.

我如何才能要求复制语义,或者至少让未来的开发人员清楚他们想要使用复制语义?

4

1 回答 1

0

正如您正确解释的那样,无法从类本身内部强制执行复制语义。

根据创建 ViewState 对象的位置和方式,以及这在概念上的含义,可以使用不同的方法。

我不确定 ViewState 在您的项目中的含义,但如果有意义,您可以提供一个单例/工厂 ViewStateFactory 类,该类将具有一些用于创建和/或复制客户端将使用的 ViewState 对象的方法。然后,ViewStateFactory 可以确保每次客户端请求 ViewState 对象时都提供新副本。

请注意,这是向您班级的客户添加一些样板。它也不会阻止人们落后于 ViewStateFactory 并直接分配和/或引用 ViewState 对象。但它可以更清楚地说明您的意图以及您希望其他人如何使用您的课程。

于 2013-07-21T18:20:49.507 回答