5.類的擴展之objective-c

1.類目(類目也稱爲分類,爲沒有源碼的類(系統類、別人的類)添加方法)

    

    1)作用

    

        可以擴展別人的類,可以作爲子類的替代方法。

        把同一類的代碼放到多個文件中。

    

    2)形式

        

        文件名:.h文件(目標類+類目名.h)  .m文件(目標類+類目名.m)


    3)注意

    

        可以爲同一個類添加多個類目,但類目名和方法不能重複

        不要隨意重寫原類中的方法

        所添加類與原類中方法同級,而且會被子類繼承

    

    Demo:

    

        爲字符串添加一個類目

        

        NSString+SayHi.h

    

        @interface NSString (SayHi)

        

        -(void)sayHi;//爲字符串添加方法

        

        @end

        

    

        NSString+SayHi.m

    

        @implementation NSString (SayHi)

        

        -(void)sayHi

        {

            NSLog(@"我是一個特殊字符串 %@,我有sayHi方法",self);

        }

        

        @end

        

        

    

    

2.延展(延展是特殊形式的類目)

    

    1)作用

        

        爲自己的類添加私有方法

    

    2)形式

        這是在.m文件中

    

        @interface  類名(延展名,可以爲空

        

        -(返回類型)method

        

        @end

        

        @implementation 類名

        

        (返回類型)method

        {

            

        }

    

        @end

    

    3)注意

    

        不需要創建新文件,直接在原類的.m文件中聲明和實現。

        所謂私有時候僅.m通過[self method]訪問,不能在外部通過[對象 method]訪問。

    

    Demo

        Person.h

        @interface Person : NSObject

        -(void)sayHi;

        @end

        

        Person.m

        @interface Person(extension)//延展

        -(void)test;//聲明

        @end

        

        @implementation Person

        -(void)sayHi

        {

            [self test];

        }

        -(void)test//實現

        

        {

            NSLog(@"...");

        }

        @end

    

    

    

    

    

3.協議(協議是由@protocol 聲明的一組方法列表,只聲明方法,不具體實現)實例說明代理

    

    1)作用

    

        將方法定義剝離出來,形成一個單獨的文件。

    

    2)形式

    

        @protocol 協議名<其他協議>

    

        @required

        -(返回類型)method

        

        @optional

        -(返回類型)method

    

        @end

        注:方法默認是@required 必須實現,如果可以不實現用@optional

    

    3)代理模式  (實例說明代理)

    (由別人幫自己實現某個功能的模式稱爲代理模式)

        

        接受代理(.h文件中)

        

            @interface 類名:父類名 <協議名1,協議名2,協議名3>(多個協議之間用逗號隔開)

        

            @end

        

        確認協議(.m文件中)

            

            @implementation  類名

                

                協議中聲明的方法方法

                {

                }

        

            @end

        

            (代理=誰,誰接受並確認協議)

    

    4)注意

    

        協議聲明瞭可以被任何類實現的方法

        協議定義了一個其他對象可以實現的接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章