一Category的定義和使用 二Extension的定義和使用 三Protocol的定義和使用 delegate的使用
Category,分類或類目。主要作用是為沒有源代碼的類添加方法。通過Category添加的方法會成為原類的一部分。從而達到擴展一個類的功能。
定義Category過程
新建?件 選擇Objective-C Category模板 填寫類名和分類名 .h?件添加?法聲明 .m添加?法實現Category的聲明
NSString+SayHi.h文件
@interface NSString (SayHi)
- (void)hi;
@end
Category的實現
NSString+SayHi.m文件
#import “NSString+SayHi.h”
@implementation NSString(SayHi)
- (void)hi
{
NSLog(@”這是通過category為NSString添加的hi?方法”);
}
@end
Category與?類的區別
Extension,延展。主要作用是管理類的“私有”方法。面向對象編程在設計一個類的時候,有些方法需要對外公開(我們稱為接口),有些方法僅僅內部使用。Extension的功能是幫我們去管理這些內部使用的方法(“私有”方法)。
定義Extension過程
Extension的語法格式和Category很相似,相當於把Category的.h文件放到了原始類的.m文件中。Extension針對的是本類,必須有源代碼的類。
xxx.m文件
@interface xxx (ExtensionName)
//你的方法列表
@end
@implementation xxx
//方法的實現
@end
Category和Extension的區別
Protocol,協議,是iOS開發中常用的技術。協議是一套標准(一堆方法的聲明),只有.h文件。就像一張任務清單,上?寫了一堆需要處理的事。清單交給誰,誰就要去完成清單上規定的任務。接受協議的對象實現協議中定義的方法。即:清單交給誰,誰就要去完成清單上規定的任務。
協議分兩種: 正式協議和非正式協議。
協議中的方法默認是必須實現的,即@required。關鍵字@optional修飾的?法是可選的,可實現也可以不實現。
協議和代理6個步驟
聲明協議 設置代理人屬性 讓代理人調用方法(通知代理人執行方法) 簽訂協議 指定代理人 實現協議方法以結婚為例子(女方和男方)
聲明協議 (女方) 設置代理人屬性 (女方) 讓代理人調用方法(通知代理人執行方法) (女方) 簽訂協議 (男方) 指定代理人 (女方) 實現協議方法 (男方)結婚示例的代碼實現:
Girl.h文件代碼如下:
#import
#pragma mark 協議第一步
/* 聲明協議 */
@protocol Marry
/* 方法分兩種 */
@required /* 必需的 */
- (void)makeMoney;
@optional /* 可選的 */
- (void)washCloth;
- (void)cook;
@end
@interface Girl : NSObject
#pragma mark 協議第二步
/* 設置代理人屬性, 注意:assign */
@property (nonatomic, assign) id delegate;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) NSInteger age;
#pragma mark 協議第三步
/* 通知代理人調用方法 */
- (void)marry;
@end
Girl.m文件代碼如下:
#import Girl.h
@implementation Girl
#pragma mark 協議第三步
/* 通知代理人調用方法 */
- (void)marry
{
NSLog(@我和%@結婚了, %@負責掙錢了., self.delegate, self.delegate);
[self.delegate makeMoney];
}
@end
Boy.h文件代碼如下:
#import
#import Girl.h /* 只能是import */
#pragma mark 協議第四步
/* 簽訂協議 */
@interface Boy : NSObject
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
Boy.m文件代碼如下:
#import Boy.h
@implementation Boy
#pragma mark 協議第六步
/* 實現協議方法 */
- (void)makeMoney
{
NSLog(@我是%@, 我負責掙錢., self.name);
}
@end
main.m文件代碼如下:
#import
#import Girl.h
#import Boy.h
int main(int argc, const char * argv[]) {
@autoreleasepool {
/* 創建Girl 和 Boy對象 */
Girl *girl = [[Girl alloc] init];
girl.name = @LiSi;
girl.age = 22;
Boy *boy = [[Boy alloc] init];
boy.name = @WangLaowu;
boy.age = 25;
#pragma mark 協議第五步
/* 指定代理人 */
girl.delegate = boy;
[girl marry];
}
return 0;
}
Protocol的核?使用場景是實現delegate設計模式。delegate(代理),通俗的講就是代理商,主要的任務是幫你完
成一些任務。比如:保姆就可以認為是delegate,主要的任務是幫你帶孩子、做飯、洗衣服等。
使?場景:凡是某些任務?己不去實現,想讓別人去實現的時候,就可以指定一個代理,讓代理幫你去做。你只需要通知代理去做某事。