category、protocol、delegate总结
生活随笔
收集整理的這篇文章主要介紹了
category、protocol、delegate总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.category(類別) 類別是一種類擴展的機制,能為現有的類添加新方法。 ①類別的基本語法 @interface部分,如: @interface NSString (NumberConvenience) - (NSNumber *) lengthAsNumber; @end 我們為NSString類添加了名為NumberConvenience的類別。 注:
- ? ?? 類別只可以添加方法,不可以添加實例變量
- ? ? ?類別可以添加屬性,但屬性必須是@dynamic類型的
- ? ? ?將類的實現代碼分散到多個不同的文件和框架中,這樣可以是類劃分成多個模塊,降低類的復雜度,便于維護。
- ? ? ?類別的擴展功能,已經存在的類可以在不更改的情況下通過類別進行功能擴展。
- ? ? ?類別可以實現功能的局部化封裝,模擬實現私有方法。
- ? ? ?通過類別向對象添加非正式協議。這樣任何類的對象都可以作為委托對象來使用,它可以列出對象能夠執行的所有方法。
- ? ? ?類別不可以添加實例變量
- ? ? ?類別會發生名稱沖突,即類別中的方法與現有方法重名,類別具有更高的優先級。
- 聲明協議
- 采用協議
- @required和@optional屬性(Objective-C 2.0的新特性)
- 正式協議要求顯示的采用
- 協議名稱必須唯一
- 采用協議意味著你承諾實現該協議@required屬性的所有方法。否則,編譯器會生成警告來提醒。
- 協議可以繼承父協議
- ?protocol可以將業務方法定義剝離出來,形成單獨的文件,對于不關心的功能可以不關注他的具體實現,這樣有利于分工
- 類別可以在不改變原來代碼的情況下往里面添加新的方法,但繼承不可以。
- 類別只能添加方法,不能刪除修改方法,但繼承即可以增加,也可以修改或者刪除方法。
- 類別不可以增加屬性,而繼承可以。
- 類別中只能增加方法
- 類擴展不僅可以增加方法,還可以增加實例變量,只是該?實例變量默認是@private類型?的(作用范圍只能在自身類,而不是子類或其他地方);
- ?類擴展中聲明的方法沒被實現,編譯器會報警,但是類別中的方法沒被實現編譯器是不會有任何警告的。這是因為類擴展是在編譯階段被添加到類中,而類別是在運行時添加到類中。
- 類擴展是在 .m 文件中聲明私有方法的非常好的方式。
- 類擴展所聲明的方法必須依托對應類的實現部分來實現(即不能像類別那樣擁有獨立的實現部分(@implementation部分))
- 類擴展只能本類調用方法,子類也無法調用父類的延展。
- ? ? ?通過block實現
- ? ? ?通過protocol實現
- ? ? ?通過delegate實現
- ? ? ?結合protocol和delegate實現
轉載于:https://www.cnblogs.com/jobten/p/4694907.html
總結
以上是生活随笔為你收集整理的category、protocol、delegate总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: G - Strongly connect
- 下一篇: 14年12月CCF真题4-最优灌溉