程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Objective-C學習筆記_類的擴展

Objective-C學習筆記_類的擴展

編輯:關於C語言

Objective-C學習筆記_類的擴展


一Category的定義和使用 二Extension的定義和使用 三Protocol的定義和使用 delegate的使用

一、Category的定義和使用

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與?類的區別

  Category(類目) Subclass(子類) 功能 只能為類添加方法 既能為類添加方法,也能添加變量 特點 新添加的方法會變成原始類的一部分,能被子類繼承 新添加的方法只有子類才有,父類沒有 使用 使用原始類的實例(-號方法)或者使用原始類(+號方法)調用方法 子類才能調用,

二、Extension的定義和使用

Extension,延展。主要作用是管理類的“私有”方法。面向對象編程在設計一個類的時候,有些方法需要對外公開(我們稱為接口),有些方法僅僅內部使用。Extension的功能是幫我們去管理這些內部使用的方法(“私有”方法)。

定義Extension過程

Extension的語法格式和Category很相似,相當於把Category的.h文件放到了原始類的.m文件中。Extension針對的是本類,必須有源代碼的類。

xxx.m文件

@interface xxx (ExtensionName)
  //你的方法列表
@end

@implementation xxx
  //方法的實現
@end

Category和Extension的區別

  Category Extension 作用 為沒有源代碼的類添加方法 管理類的私有方法 格式 定義一對.h和.m 把代碼寫到原始類的.m文件中

三、Protocol的定義和使用

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;
    }

delegate的使用

Protocol的核?使用場景是實現delegate設計模式。delegate(代理),通俗的講就是代理商,主要的任務是幫你完
成一些任務。比如:保姆就可以認為是delegate,主要的任務是幫你帶孩子、做飯、洗衣服等。

使?場景:凡是某些任務?己不去實現,想讓別人去實現的時候,就可以指定一個代理,讓代理幫你去做。你只需要通知代理去做某事。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved