如果我想定義一個自定義的UIView子類,當它的邊界被設置時執行某些操作,我該如何覆蓋setter?覆蓋setBounds看起來很危險,因爲如果我理解正確,getter和setter名稱不是公共接口的一部分,並且可以隨時更改。我該如何幹淨地重寫屬性setter?
當然,我使用class_copyPropertyList來查詢運行時查找類中定義的屬性列表,然後查詢setter的名稱,最後使用class_addMethod在第一次獲得對先前方法的引用後添加該方法用於調用原始版本。
所有這些看起來都很糟糕。有沒有一種乾淨的方式來做我想做的事情,保證在未來的操作系統版本上不會中斷?謝謝。
bounds屬性在UIView頭文件中定義,因此您的評論「getter和setter名稱不是公共接口的一部分,並且可以隨時更改」不是true:'@property(nonatomic)CGRect bounds'這意味着getter/setter是'bounds' /'setBounds:' – 2011-03-21 17:28:43
實例變量也在頭文件中聲明,但這並不意味着它們是公共接口的一部分:)是否準確地說出http:// developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html是公共界面嗎?這沒有提到setBounds。 – 2011-03-22 06:25:24