2013-01-18 28 views

回答

1

儘管Objective-C語言目前允許您使用類別來覆蓋該類繼承的方法,或者甚至在類接口中聲明的方法,但強烈建議您不要這樣做。一個類別不能代替一個子類。

關於您的問題它對系統上運行的其他應用程序有影響嗎?
答案是大號它只會影響您的應用程序。

0

儘管類別爲您提供了將新方法添加到現有類的規定。您也可以覆蓋現有的方法,但在少數情況下,您最終可能會失去控制權,因爲哪種方法會被調用!

有時,即使您重寫使用Frameworks方法的方法,也不會考慮您的方法。

所以我建議你不應該使用相同的方法名稱來覆蓋。您可以直接使用,來區分:

addObserverCustom:

2

重載addObserver:forKeyPath:option:contex是不是一個好主意。從類別實現中,您不能調用方法的super實現,這基本意味着沒有觀察者會被添加。

雖然這隻會影響你的應用,但它會在全球範圍內這樣做,這意味着即使外部框架也會受到影響,比如UIKit或Fundation。

+0

重點是影響外部框架。我使用method_exchangeImplementations(originalAddObserver,myAddObserver)調用原始方法;在+ load類方法中。 – zalavari

+0

我需要這個的原因是添加屬性的可觀察數組屬性。 因此,新的addObserve:檢查我是否觀察了我的'屬性'鍵,以防萬一它觀察到其他所有屬性,並手動通知'屬性'鍵。 valuesAffectingKey ...不令人滿意,因爲它不能正確支持可變屬性,如提供插入或刪除通知。 – zalavari

+0

或提供腳本編寫方法。 – zalavari