我有一個Objective-C類,專用於複製語義。爲Objective-C類的用戶強制執行複製語義
@property (copy) ViewState* viewState;
這不是一成不變的,而是掛在一個ViewState
實例一切都需要自己的獨特的副本。事實上,如果其他類錯誤地嘗試
@property (strong) ViewState* viewState;
我們最終會崩潰。
我們如何強制或鼓勵客戶端類使用正確的語義?
在C++中,例如,我們可以禁止轉讓
private:
CPViewState* operator=(const CPViewState*) const; // no implementation
但是,我們不能這樣做,在Objective-C。對於相反的情況,如果我們想禁止複製,我們可以記錄錯誤或從copyWithZone:
中拋出異常。
我該如何要求複製語義,或者至少讓未來的開發人員清楚他們想使用複製語義?
你是什麼意思「如果其他班級錯誤地嘗試[...]」?你在談論子類嗎? –
MyWindow有一個ViewState。後來,有人編寫了MyWindowManager,它跟蹤每個窗口的ViewState並執行其他操作。我想確保MyWindowManager的作者知道她應該將她的實例變量定義爲@property(copy)...,而不是@property(strong)。 –
這種東西只能修改編譯器。如果您在類文檔中寫入實例應該被複制並且未被分配,就足夠了。 –