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修飾 必須實現的方法...