亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用目標C中類別的重寫方法

使用目標C中類別的重寫方法

慕森王 2019-06-24 16:34:52
使用目標C中類別的重寫方法是否可以使用類別覆蓋已經使用類別實現的方法?就像這樣:1)原始方法-(BOOL) method {   return true;}2)過載法-(BOOL) method {   NSLog(@"error?");    return true; }這是可行的,還是非法的?
查看完整描述

3 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

盡管Object-C語言目前允許您使用類別來覆蓋類繼承的方法,即使是類接口中聲明的方法,也強烈建議您不要這樣做。..類別不能代替子類。使用類別覆蓋方法有幾個重大缺點:

  • 當類別覆蓋繼承的方法時,類別中的方法可以像往常一樣通過消息調用繼承的實現super..然而,如果類別覆蓋類別的類中存在的方法,則無法調用原始實現.

  • 類別不能可靠地覆蓋同一類的另一個類別中聲明的方法。

    這個問題特別重要,因為許多Cocoa類都是使用類別實現的。您試圖覆蓋的框架定義方法本身可能已在類別中實現,因此未定義優先實現。

  • 某些類別方法的存在可能導致跨所有框架的行為更改。例如,如果您覆蓋windowWillClose:在NSObject上的類別中,程序中的所有窗口委托都使用類別方法進行響應;NSWindow的所有實例的行為可能會發生變化。在框架類中添加的類別可能會導致行為上的神秘變化,并導致崩潰。


查看完整回答
反對 回復 2019-06-24
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

你可以通過調整類簇接近,或使用搖擺法技術。

否則,兩個或兩個以上的行為分類方法是未定


查看完整回答
反對 回復 2019-06-24
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

避免類別方法名稱沖突

因為在類別中聲明的方法被添加到現有的類中,所以您需要非常小心地處理方法名稱。

如果在類別中聲明的方法的名稱與原始類中的方法相同,或同一類(甚至是超類)上的另一個類別中的方法相同,則未定義在運行時使用哪種方法實現的行為。如果您在自己的類中使用類別,這就不太可能成為問題,但是當使用類別將方法添加到標準Cocoa或CocoaTouch類時可能會導致問題。

這是蘋果使用的更輕的觸摸,但要點是一樣的:你招致災難,因為不可預測的行為是沉默的。


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 662 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號