Objective C 協議 分類 擴充套件

2021-07-22 02:29:01 字數 4386 閱讀 7553

1.協議是一種要求,或者一種規則

2.對程式來講,是只宣告,不實現

3.協議必須被某個類採納且在該類中給出協議中方法的函式體

4.對於採納協議的類,可以和其他類一樣使用

建乙個協議myprotocol

.h檔案

#import 

@protocol

czmyprotocol

@property

nsstring *content; //協議中定義的屬性

-(void)show; //協議中定義的方法

@end

建乙個類myclass

.h檔案

#import

#import

"czmyprotocol.h"

//要包含協議檔案

@inte***ce czmyclass : nsobject//需要採納協議

@end

.m檔案

#import "czmyclass.h"

@implementation

czmyclass

@synthesize content = _content;

-(void)show //在類中實現協議中的方法

@end

main函式

#import 

#import "czmyclass.h"

#import "czclassa.h"

#import "czclassb.h"

#import "czclassc.h"

void test1()

int main(int argc, const

char * argv)

return

0;}

執行結果

2016-08-25 20:40

:04.399

day17_05

[5300:344831] 秀一下,協議中的屬性

2016-08-25 20:40

:04.400

day17_05

[5300:344831] 秀一下,萬能指標使用屬性

program

ended

with

exit

code: 0

5.協議可以繼承,包括多個父協議
#import "czprotocol2.h"

#import "czprotocol3.h"

@protocol

czprotocol4

@end

陣列協議多型

void test5()

}

引數協議多型

void

fun(ida)

void test6()

返回值協議多型

typedef enum

type;

idget(type type)

}void test7()

2.1.將乙個複雜的類分成若干個模組,其中每個模組被稱為乙個分類,

2.2.分類的作用是降低耦合度

2.3.分類的語法

2.4.在主函式中只能看到乙個主類,不會看到分類

2.5.分類中不能定義成員變數或屬性

2.6.可以給沒有源**的類新增分類,分類的方法不能跟主類的方法同名

建乙個主類fraction

.h檔案

#import 

@inte***ce

czfraction : nsobject

@property

int n;

@property

int d;

-(void)show;

@end

.m檔案

#import "czfraction.h"

@implementation

czfraction

-(void)show

@end

建乙個init分類

.h檔案

#import "czfraction.h"

//分類寫主類的初始化方法

@inte***ce

czfraction (czinit)

-(id)initwithn:(int)n andd:(int)d; //分類中只能定義方法

+(id)fractionwithn:(int)n andd:(int)d;

@end

.m檔案

#import "czfraction+czinit.h"

@implementation

czfraction (czinit)

-(id)initwithn:(int)n andd:(int)d

return

self;

}+(id)fractionwithn:(int)n andd:(int)d

@end

再寫乙個math分類

.h檔案

#import

"czfraction.h"

//分類寫math功能的方法

@inte***ce czfraction (czmath)

-(czfraction*)add:(czfraction*)f;

-(czfraction*)sub:(czfraction*)f;

-(czfraction*)mul:(czfraction*)f;

-(czfraction*)div:(czfraction*)f;

@end

.m檔案

#import "czfraction+czmath.h"

#import "czfraction+czinit.h"

@implementation czfraction (czmath)

-(czfraction *)add:(czfraction *)f

-(czfraction *)sub:(czfraction *)f

-(czfraction *)mul:(czfraction *)f

-(czfraction *)div:(czfraction *)f

@end

main函式

#import 

#import "czfraciom+czinit.h"

#import "czfraciom+czmath.h"

#import "czfraciom+cztransfer.h"

int main(int argc, const char * argv)

-(void)extensionmethod0;

@end

擴充套件寫在類的.m檔案中

#import "czfraction.h"

#import "czfraction_czmyextension.h"

//寫在.m檔案中的擴充套件一般用於宣告私有方法,方便程式設計師檢視

@inte***ce

czfraction() //擴充套件寫在.m檔案中的時候,屬性和方法都是私有的

@property

int value; //私有

-(void)extensionmethod1;//私有

@end

@implementation

czfraction

-(void)show

-(void)extensionmethod0 //私有方法

-(void)extensionmethod1

@end

objective c延展類目協議

objective c中提供了可以讓我們擴充套件類定義的手段 類目,延展和協議。類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 協議 協議宣告了可以被任何類實現的方法。注意 這些手段只能增加類的方法,並不能用於增加例項變數,要增加類的例項變數,只能通過定義子類來間接實現...

Objective C 分類底層原理分析

ios分類使用的場景就是把功能模組化,把一組類似的功能擴充套件出乙個分類,便於 的維護以及功能的分塊 分類在ios底層的資料結構如下 struct category t name 被分類的類名稱 cls isa指標 instance methods 物件方法列表 class methods 類方法列...

Objective C 協議最基本解釋

生活中的協議 租戶和房東之間的協議 房東的義務 a.交水電費 b.交暖氣費 c.交業務費 租戶的義務 a.交房租 b.保護房內物品 import 協議最基本用法 protocol 協議名 協議型別 在協議中只宣告方法,而沒有方法實現 protocol usb 有 required修飾 必須實現的方法...