好吧先舷,這里是第一篇個人博客。從小到大一直未玩過博客滓侍,今日受CZH君的啟發(fā)蒋川,決定也玩玩博客。一是為了記錄自己的學(xué)習(xí)軌跡撩笆,二也是算鍛煉鍛煉文筆捺球,這對習(xí)慣少說多做的我來說缸浦,是一種全新的體驗。
那么氮兵,今天來總結(jié)一下做了些什么吧裂逐。
閱讀了CZH君的weather app,學(xué)到了一些以前忽略的東西。當(dāng)然泣栈,也有自己對某些邏輯的見解卜高,并在他的基礎(chǔ)上進(jìn)行了嘗試。
直接說代碼吧:
1.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[[DataBaseManager sharedDataBaseManager]insertForecastWeather:_forecastData];
});
[self showForecastData:_forecastData];
didGainForecastWeather=YES;
[self whetherCompleteRequest];
關(guān)于后臺異步處理數(shù)據(jù)庫操作南片,主線程更新UI,我認(rèn)為不必用_sync(main_queue)掺涛,會有deadlock的隱患。既然此處已經(jīng)是在回調(diào)block中疼进,數(shù)據(jù)庫操作和UI操作沒有先后關(guān)系薪缆,則直接調(diào)用內(nèi)部方法即可。
2.
關(guān)于枚舉值伞广。
typedefNS_ENUM(NSUInteger, <#MyEnum#>) {
<#MyEnumValueA#>,
<#MyEnumValueB#>,
<#MyEnumValueC#>,
<#MyEnumValueD#>
};
用以分辨不同的狀態(tài)碼矮燎,從而避免一些重復(fù)代碼。Don’t repeat yourself.枚舉的使用是簡化代碼赔癌,理清邏輯的重要手段诞外。
3.
復(fù)習(xí)之前看過的動畫教程。說起來灾票,這幾天雜七雜八的事情峡谊,又沒有繼續(xù)動畫方面的學(xué)習(xí),不過也不太急刊苍,終歸都是要學(xué)會的既们,只要堅持在做,一切都會慢慢來的正什。
CABasicAnimation* rotation=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotation.toValue=@(2*M_PI);
rotation.duration=0.5;
rotation.cumulative=YES;
rotation.repeatCount=MAXFLOAT;
[_renewButton.layer addAnimation:rotation forKey:@"rotation"];
Layer的屬性動畫(留給以后勘誤)啥纸。
這個動畫效果還是不錯的,應(yīng)用于刷新按鈕婴氮。
4.
_coordinateDic[@"lon"]]];
NSURLRequest* weatherRequest=[NSURLRequest requestWithURL:weatherURL];
NSURLSession* weatherSession=[NSURLSession sharedSession];
NSURLSessionDataTask* acquireWeatherData=[weatherSession dataTaskWithRequest:weatherRequest completionHandler:^(NSData* data,NSURLResponse* response,NSError* error) {
if(error==nil){
NSDictionary* weatherDic=[NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
NSArray* weatherArr=[weatherDic objectForKey:@"list"];
self.gainForecastBlock(weatherArr);
}else{
NSLog(@"%@",[error localizedDescription]);
}
}];
[acquireWeatherData resume];
關(guān)于系統(tǒng)原生的URLSession使用斯棒。
5.
mantle YYModel 等ORM工具≈骶可以極大的簡化代碼荣暮,減少構(gòu)建模型的重復(fù)代碼,但是記得要寫明映射圖罩驻,如:
+ (NSDictionary*)modelCustomPropertyMapper {
return@{@"publishDate":@"publish_date",
@"itemsCount":@"items_count",
@"issueID":@"issue_id"
};
}
+ (NSDictionary*)modelContainerPropertyGenericClass {
return@{
@"items":RecipeItem.class
};
}
對于有container的(字典穗酥,數(shù)據(jù)),要寫明這些container中的元素的類是什么。運用YYModel不需要繼承砾跃,而mantle需要骏啰。YYModel是以category的形式集成的,無侵入性抽高。另外還有MJExtension判耕。
好了,今天就寫這么多把厨内。以后會開啟復(fù)習(xí)筆記的模式祈秕, 把evernote中的學(xué)習(xí)記錄一個個過一遍渺贤,加深印象雏胃。另外,考試fighting!