最近經(jīng)過一番折騰換了工作巾陕,進(jìn)入一家新公司獨(dú)立開發(fā)魂奥,而且是接受公司老項(xiàng)目菠剩。入職后測(cè)試童鞋就反饋iOS的APP很多頁面都閃退,體驗(yàn)很不好耻煤。那么我就針對(duì)幾個(gè)閃退的頁面開始定位問題具壮,發(fā)現(xiàn)是后臺(tái)返回的json數(shù)據(jù)中有null,那么我就跟后臺(tái)人員反饋?zhàn)屗麄兏牧税裯ull改為空字符串或者空數(shù)組违霞,算是臨時(shí)解決了嘴办。
過了幾天,測(cè)試又反饋买鸽,又有很多頁面閃退涧郊。我再仔細(xì)一看原來是后臺(tái)返回的數(shù)據(jù)中每個(gè)接口都有null,而iOS端又沒有使用MJExtenSion,或者YYmodel這種字典轉(zhuǎn)模型的方式去轉(zhuǎn)換過濾眼五,直接去json中的字段妆艘,所以造成崩潰。
解決方法有2個(gè):
1.最先推薦使用這種方法
1.1. 設(shè)置AFHTTPSessionManager
AFJSONResponseSerializer* jsonResponeSerializer = [AFJSONResponseSerializer serializer];
jsonResponeSerializer.removesKeysWithNullValues = YES;
manager.responseSerializer = jsonResponeSerializer;
1.2. 找到 AFN響應(yīng)序列化 AFURLResponseSerialization.m這個(gè)類文件,文件內(nèi)搜索
[mutableDictionary removeObjectForKey:key]
這句代碼看幼,然后做下面的替換操作
//[mutableDictionary removeObjectForKey:key]; 這里是本庫作者的源代碼
//下面是改動(dòng)后的批旺,將空指針類型改為nil;(網(wǎng)上也有人說改為""空字符串,個(gè)人感覺改為nil更好)
mutableDictionary[key] = nil;
2.第二種方法
github上已經(jīng)有人寫好了一個(gè)Category诵姜,叫做NullSafe(點(diǎn)擊即可查看)汽煮,只要將這個(gè)分類拖入過程即可不用其他操作,使用方便。
不過個(gè)人感覺雖然解決了暇赤,線上崩潰的問題心例,但是開發(fā)階段不便于定位崩潰的地方,所以開發(fā)階段使用時(shí)記得刪除鞋囊,上線的時(shí)候再引入工程中止后。
其他當(dāng)然也有很多處理的方法,不過個(gè)人感覺這兩種比較靠譜溜腐。