溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

【Objective-C】OC中類別(Category)基本概念與用法

發(fā)布時(shí)間:2020-06-10 20:40:18 來(lái)源:網(wǎng)絡(luò) 閱讀:315 作者:jiangqq900826 欄目:開發(fā)技術(shù)

類別(Category)的基本概念

     封裝是面向?qū)ο蟮囊粋€(gè)特征,OC也不例外,但是有的時(shí)候我們會(huì)碰到這樣的一種情況,不如我封裝了一個(gè)類,

不想再動(dòng)它了,可是隨著程序功能的增加,需要在那個(gè)類中增加一個(gè)小小的方法,這是我們就不必再那個(gè)類中

做修改或者在定義一個(gè)子類,只需要在用到的地方隨手添加一個(gè)該類的類別(Category)即可。

    (1)在類別中定義的方法,會(huì)成為原始類的一部分,與其他方法的調(diào)用沒有區(qū)別。

    (2)通過(guò)給父類定義類別方法,其子類也會(huì)繼承這些方法。如果子類添加類別方法,父類則不會(huì)用手子類的類別方法。


類別方法的應(yīng)用

  •      對(duì)現(xiàn)有類進(jìn)行擴(kuò)展:比如,可以進(jìn)行擴(kuò)展Cocoa touch框架中類,你在類別中增加的方法會(huì)被子類所繼承,而且

              在運(yùn)行時(shí)跟其他的方法沒有區(qū)別。

  •      作為子類的替代手段:不需要定義和使用一個(gè)子類,你可以通過(guò)類別直接向已有的類別中增加方法。
  •      對(duì)類中的方法進(jìn)行歸類:利用category把一個(gè)龐大的類劃分為小塊來(lái)分別進(jìn)行開發(fā),從而更好的對(duì)類中的方法進(jìn)行更新和維護(hù)。

類別方法的局限性

  •       無(wú)法向類別中,添加新的實(shí)例變量,類別沒有位置來(lái)容納實(shí)例變量。如果想增加類的實(shí)例變量,只能通過(guò)定義子類的方式。
  •       如若在類別中覆蓋現(xiàn)有類的方法。這樣可能會(huì)引起super消息鏈的斷裂,因?yàn)轭悇e中的方具有更高的優(yōu)先級(jí),因此,一般不要覆蓋

                現(xiàn)有類中的方法

類別的命名和用法

    類別的命名規(guī)則:類名+擴(kuò)展方法,如:NNString+Add;

    類別的接口聲明與類的定義十分相似,但是類別不繼承父類,只需要帶有一個(gè)括號(hào),表明該類的主要用途

    【Objective-C】OC中類別(Category)基本概念與用法

    聲明文件:

#import <Foundation/Foundation.h>  @interface NSArray (Convert) +(NSMutableArray *)arrayFormNumber:(int)number;  @end

  實(shí)現(xiàn)文件:
  
#import "NSArray+Convert.h"  @implementation NSArray (Convert)  +(NSMutableArray *)arrayFormNumber:(int)number{     NSMutableArray *numberArray=[[NSMutableArray alloc]init];     while (number) {         int last=number%10; //取出最后一位;         number=number/10;         [numberArray addObject:[NSNumber numberWithInt:last]];              }     return  [numberArray autorelease]; }  @end

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI