ios NSProxy模擬多繼承

2021-08-13 11:37:39 字數 2013 閱讀 9663

在網上也看到了個例子是模擬多繼承的,大致的應用場景是這樣的,如果我們目前有乙個類a,還有乙個類b,類a有父類,類b也有父類,然後現在我們要完善的功能就是要集合a中的功能以及b中父類的功能,如果有多繼承,我們完全可以直接讓a類繼承自它原本的父類以及b類的父類就可以了。但是在oc中是沒有多繼承的,所以無法這麼做,如果我們要去修改a的父類或者a的類的話太麻煩了,所以這個時候我們就可以用nsproxy來模擬多繼承,比如說我們想要在乙個類中即實現買書的功能也能實現買衣服的功能,也就是說那個類是個經銷商,綜合了各種功能,那麼我們可以把賣書的經銷商和賣衣服的經銷商的功能集合在哪個類中,這樣我們就可以在乙個類中統一的去購買,而不用自己去一一的購買了,大致就是這麼乙個意思。直接上**

賣書經銷商

#import @protocol zxbookproviderprotocol

-(void)purchasebookwithtitle:(nsstring *)booktitle;

@end

@inte***ce zxbookprvider : nsobject

@end

類實現

#import "zxbookprvider.h"

@implementation zxbookprvider

-(void)purchasebookwithtitle:(nsstring *)booktitle

@end

賣衣服的經銷商

#import typedef ns_enum(nsinteger,zxclothessize)

;@protocol zxclothesproviderprotocol

-(void)purchaseclotheswithsize:(zxclothessize)size;

@end

@inte***ce zxclothesprovider : nsobject

@end

類實現

#import "zxclothesprovider.h"

@implementation zxclothesprovider

-(void)purchaseclotheswithsize:(zxclothessize)size

nslog(@"bought some clothes of %@",string);

}@end

綜合經銷商

#import #import "zxclothesprovider.h"

#import "zxbookprvider.h"

@inte***ce zxpurchaseproxy : nsproxy+(instancetype)gainproxy;

@end

類實現

#import "zxpurchaseproxy.h"

#import @inte***ce zxpurchaseproxy()

@end

@implementation zxpurchaseproxy

#pragma mark 類方法

+(instancetype)gainproxy

#pragma mark 初始化方法

-(instancetype)init

#pragma mark 新增方法

//新增方法進入字典中

-(void)registermethodswithtarget:(id)target

free(methodlist);

}#pragma mark nsproxy的方法

//生成方法簽名

-(nsmethodsignature *)methodsignatureforselector:(sel)sel

else

}//配發訊息

-(void)forwardinvocation:(nsinvocation *)invocation

else

}@end

模擬多執行緒

用兩個執行緒玩猜數字遊戲,第乙個執行緒負責隨機給出1 100之間的乙個整數,第二個執行緒負責猜出這個數。要求每當第二個執行緒給出自己的猜測後,第乙個執行緒都會提示 猜小了 猜大了 或 猜對了 猜數之前,要求第二個執行緒要等待第乙個執行緒設定好要猜測的數。第乙個執行緒設定好猜測數之後,兩個執行緒還要相...

es6通過Mixin模擬多繼承

這週在專案中為了實現乙個樹形圖,所以寫了乙個類,隨著功能的增加,這個類越來越多,量也就越來越多,易讀性很低,所以打算按功能將 抽離到新的檔案,就想到了類的繼承,但是一般的類都是單繼承,那麼怎麼實現多繼承呢?引入乙個概念混合模式,在修飾器的基礎上,可以實現mixin模式。所謂mixin模式,就是物件繼...

curl模擬多執行緒

開啟會話 設定會話引數 傳送請求 關閉控制代碼 請求鏈結 arr foreach arr as key url 執行curl會話 res curl exec ch 關閉curl會話並釋放資源 curl close ch 指令碼開始的毫秒時刻 start microtime true 鏈結陣列 arr...