Category和Protocol筆記 by STP

1.Category:無需創建子類就能爲現有的類創建新方法的方式

 

格式:

#import MyClass.h

@interface MyClass(MyCategory){ 
    -(void)categoryMethod;
  }
@end

 


 
#import MyClass+MyCategory.h
@implementation MyClass(MyCategory){
    -(void)categoryMethod{
        NSLog(@"這是分類方法");
  }
}
@end</span>

 

 

 

 

 

 

作用:

1.將類的擴展分散到不同的文件中,方便管理;

2.聲明其他類未實現的私有方法,避免編譯器產生警告;

3.向對象添加非正式協議。

 

使用場景:

1.團隊開發,一個類中的很多方法需由不同的組員實現;

2.擴展基礎類庫中的類,例如:NSString等

 

侷限性:

1.無法添加實例變量,只能添加方法;

2.當Category中的方法與原始類中的方法同名時,Category的方法優先級更高,原始類中的方法將被覆蓋,無法使用

 

Category和Extension(類擴展)的區別:

1.從形式上看,Extension是匿名的Category;

2.Extension可添加變量;

3.Extension聲明的方法需要在main implementation中實現,Category可不實現。

 

 

2.Protocol:一系列的方法列表,類似於Java的接口

 

 

作用:

1.利用protocol實現代理模式,解耦MVC中view和controller。

 

使用場景:

1.UIView產生的事件通過protocol通知controller。

 

protocol可以在單獨的h文件中,也可寫在相關類的h文件中

格式:

 

@protocol XXXDelegate<NSObject>

@required
-(void)requiredMethod;  //必須實現的方法,如果不寫註解,默認爲required

@optional
-(void)optionalMethod;  //可選方法

@end

 

//TestDelegate.h

@interface TestDelegate:NSObject<XXXDelegate>  //如需採用多個protocol,可用“,”隔開

@end

 

//TestDelegate.m

@implementation TestDelegate

    -(void)requiredMethod{
        NSLog(@"protocol的required方法");
    }
@end

 

 

 

 

 

 

 

 

 

 

 

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