前言
近期看了許多關(guān)于runtime的文章,自己花了一段時(shí)間去鉆研這塊東西,下面分享一下如何用runtime封裝網(wǎng)絡(luò)請(qǐng)求鳖宾。
實(shí)現(xiàn)原理
runtime有一個(gè)方法肖爵,就是可以去遍歷一個(gè)類對(duì)象的所有屬性舔哪。
MyClass *myClass = [[MyClass alloc] init];//創(chuàng)建了類對(duì)象
unsigned int outCount = 0;//記錄類對(duì)象屬性的個(gè)數(shù)
Class cls = [myClass class];//獲取類名
objc_property_t* properties = class_copyPropertyList(cls, &outCount);//獲取類的所有對(duì)象數(shù)組properties outCount表示數(shù)組的元素個(gè)數(shù)
for(int i = 0; i < outCount; i++) {//遍歷properties數(shù)組
objc_property_t property = properties[i];//類對(duì)象的每個(gè)屬性
const char* char_property_name = property_getName(property);//轉(zhuǎn)化成char類型
if (char_property_name) {//判斷是否獲取成功
NSString *property_name = [[NSString alloc] initWithCString:char_property_name encoding:NSUTF8StringEncoding];// 轉(zhuǎn)換OC類型的字符串
}
}
free(properties);//釋放指針
由此可以得到一個(gè)啟發(fā):網(wǎng)絡(luò)請(qǐng)求是可以通過類文件來管理的。
思路
所有網(wǎng)絡(luò)請(qǐng)求的類文件都繼承一個(gè)基類BaseNetRequest铺峭,然后在子類的.h中寫上網(wǎng)絡(luò)請(qǐng)求中需要的請(qǐng)求參數(shù)名墓怀,在BaseNetRequest.m文件中,通過上述runtime的方法獲取網(wǎng)絡(luò)請(qǐng)求參數(shù)卫键,并在子類的init方法里做統(tǒng)一處理傀履。
優(yōu)點(diǎn)
1.網(wǎng)絡(luò)請(qǐng)求可以通過文件的形式統(tǒng)一管理,方便開發(fā)者根據(jù)文件結(jié)構(gòu)去尋找對(duì)應(yīng)的請(qǐng)求莉炉。
2.需要做統(tǒng)一操作時(shí)钓账,可以在BaseNetRequest文件中進(jìn)行處理。
如何使用
項(xiàng)目目錄結(jié)構(gòu)
- 測(cè)試服務(wù)器地址 http://xxxxxxxxxx
- 接口名稱 initAction/getBanner
- 請(qǐng)求參數(shù) position(傳0)t(1-iOS絮宁,2-android)
示例代碼
創(chuàng)建對(duì)應(yīng)的請(qǐng)求類TestNetRequest梆暮,繼承自BaseNetRequest,在.h中寫上對(duì)應(yīng)的請(qǐng)求參數(shù)绍昂。
調(diào)用結(jié)果
demo中有詳細(xì)的注釋和使用方法啦粹,地址:NetRequestDemo