iOS基礎知識:類目、延展

一 、類目: 爲已存在的類添加新的方法。但是不能添加實例變量。

        應用:1對現有的類進行擴展,如:系統中的類,在類目中增加的方法會被子類繼承,而且在運行時跟其他的方法沒有區別。

                       2、作爲子類的替代方式,不需要定義和使用一個子類,可以通過類目直接向已有的類裏增加方法。

                       3、對類中的方法進行歸類,利用catigory把一個龐大的類劃分爲小塊來分別進行開發,從而更好地對類中的方法進行更新和維護。

                       4、和普通接口有所區別的是,在Category的實現文件中的實例方法只要你不去調用它你可以不用實現所有聲明的所有方法。

         侷限性: 1、無法向類目中添加新的實例變量。

                           2、類目中的方法具有更高的優先級,若在類目中覆蓋原始類的方法(重載)。會引起super消息的無效,因此,一般不要覆蓋現有類中的方法。

                                 如果確實要重載,那就通過繼承創建子類來實現。

         命名方式:類名+擴展方法,如“UIAlertView+AFNetworking”。類目的接口聲明與類的定義十分相似,但類目不繼承父類,只需要帶有一個括號,表明該類目的主要用                                  途。

         在AFNetworking中有這樣一個類目、實現附帶alterview 的網絡請求。 

         例:UIAlertView+AFNetworking.h文件中

<span style="font-family:System;font-size:12px;">#import <Foundation/Foundation.h>
@interface UIAlertView (AFNetworking)
+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task delegate:(id)delegate;</span>
          UIAlertView+AFNetworking.m文件中

<span style="font-family:System;font-size:12px;">#import "UIAlertView+AFNetworking.h"
@implementation UIAlertView (AFNetworking)
+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task delegate:(id)delegate
{
    [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil];
}</span><span style="font-size:12px;font-family: 宋體, 'Arial Narrow', arial, serif;">
</span>

二、延展:延展的作用就是定義自己的私有方法。

              形式和類目相同,不用新創建文件,延展中定義的方法在類本身的@implementation代碼區域中進行實現。

                     當在定義延展的時候不提供類目名時,延展中定義的方法既被視爲“必須實現”的API在這種情況下,如果方法沒有實現代碼,那麼編譯器會報警告,這個時候方法的實現就一定要出現在類主體的@implementation代碼塊中了。

     

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