一.Category
分類就是對(duì)一個(gè)類的功能進(jìn)行擴(kuò)展,,讓這個(gè)類能夠適應(yīng)不不同情況的需求.在一般的實(shí)際開(kāi)發(fā)中,我們都會(huì)對(duì)系統(tǒng)的一些常用類進(jìn)行擴(kuò)展,比如,NSString,Button,Label等等,簡(jiǎn)單來(lái)說(shuō)類別是一種為現(xiàn)有的類添加新方法的方式。
利用Objective-C的動(dòng)態(tài)運(yùn)行時(shí)分配機(jī)制,Category提供了一種比繼承(inheritance)更為簡(jiǎn)潔的方法來(lái)對(duì)類進(jìn)行擴(kuò)展涣仿,無(wú)需創(chuàng)建對(duì)象類的子類就能為現(xiàn)有的類添加新方法踩叭,可以為任何已經(jīng)存在的類添加方法欣福,包括那些沒(méi)有源代碼的類.如系統(tǒng)框架類Foundation,UIKit等等蝗敢。
1.類別的作用
(1)可以將類的實(shí)現(xiàn)分散到多個(gè)不同的文件或者不同的框架中逗堵,方便代碼的管理叶眉。也可以對(duì)框架提供類的擴(kuò)展(沒(méi)有源碼慷妙,不能修改)僻焚。
(2)創(chuàng)建對(duì)私有方法的前向引用:如果其他類中的方法未實(shí)現(xiàn),在你訪問(wèn)其他類的私有方法時(shí)編譯器報(bào)錯(cuò)這時(shí)使用類別膝擂,在類別中聲明這些方法(不必提供方法實(shí)現(xiàn))虑啤,編譯器就不會(huì)再產(chǎn)生警告
(3)向?qū)ο筇砑臃钦絽f(xié)議:創(chuàng)建一個(gè)NSObject的類別稱為“創(chuàng)建一個(gè)非正式協(xié)議”,因?yàn)榭梢宰鳛槿魏晤惖奈袑?duì)象使用架馋。
2.局限性
(1)分類只能增加方法,不能增加成員變量,但是可以通過(guò)運(yùn)行時(shí)來(lái)給分類添加屬性,那么成員變量和屬性有什么區(qū)別呢?
成員變量和屬性的區(qū)別:
(2)如果分類和原來(lái)類出現(xiàn)同名的方法, 優(yōu)先調(diào)用分類中的方法,原來(lái)類中的方法會(huì)被忽略,方法調(diào)用的優(yōu)先級(jí)(從高到低) 分類(最后參與編譯的分類優(yōu)先),只要有分類就優(yōu)先調(diào)用分類,不考慮與主類的編譯順序
3.利用運(yùn)行時(shí)來(lái)為分類添加屬性
用來(lái)標(biāo)記是哪一個(gè)屬性的key常見(jiàn)有三種寫法狞山,但代碼效果是一樣的,如下:
關(guān)聯(lián)策略是個(gè)枚舉值叉寂,解釋如下:
二.繼承
多個(gè)類具有相同的實(shí)例變量和方法時(shí)萍启,考慮用繼承。即子類可以繼承父類的相同特性屏鳍。如animal具有年齡和體重兩個(gè)屬性勘纯,dog也具有年齡和體重兩 個(gè)屬性,dog可以繼承animal的這兩個(gè)屬性钓瞭,即為繼承驳遵。
三.Extension:類擴(kuò)展
Extension是Category的一個(gè)特例
作用:為一個(gè)類增加私有方法,屬性或成員變量,也就是說(shuō)只能這些只能在本文件中被使用其名字為匿名(為空),并且新添加的方法一定要予以實(shí)現(xiàn)是复。(Category沒(méi)有這個(gè)限制)
Extension的實(shí)現(xiàn):
Category和Extension區(qū)別:
文/WGP_CN(簡(jiǎn)書(shū)作者)
原文鏈接:http://www.reibang.com/p/935e966c0c08