好吧,这里是第一篇个人博客。从小到大一直未玩过博客,今日受CZH君的启发,决定也玩玩博客。一是为了记录自己的学习轨迹,二也是算锻炼锻炼文笔,这对习惯少说多做的我来说,是一种全新的体验。
那么,今天来总结一下做了些什么吧。
阅读了CZH君的weather app,学到了一些以前忽略的东西。当然,也有自己对某些逻辑的见解,并在他的基础上进行了尝试。
直接说代码吧:
1.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[[DataBaseManager sharedDataBaseManager]insertForecastWeather:_forecastData];
});
[self showForecastData:_forecastData];
didGainForecastWeather=YES;
[self whetherCompleteRequest];
关于后台异步处理数据库操作,主线程更新UI,我认为不必用_sync(main_queue),会有deadlock的隐患。既然此处已经是在回调block中,数据库操作和UI操作没有先后关系,则直接调用内部方法即可。
2.
关于枚举值。
typedefNS_ENUM(NSUInteger, <#MyEnum#>) {
<#MyEnumValueA#>,
<#MyEnumValueB#>,
<#MyEnumValueC#>,
<#MyEnumValueD#>
};
用以分辨不同的状态码,从而避免一些重复代码。Don’t repeat yourself.枚举的使用是简化代码,理清逻辑的重要手段。
3.
复习之前看过的动画教程。说起来,这几天杂七杂八的事情,又没有继续动画方面的学习,不过也不太急,终归都是要学会的,只要坚持在做,一切都会慢慢来的。
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的属性动画(留给以后勘误)。
这个动画效果还是不错的,应用于刷新按钮。
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];
关于系统原生的URLSession使用。
5.
mantle YYModel 等ORM工具。可以极大的简化代码,减少构建模型的重复代码,但是记得要写明映射图,如:
+ (NSDictionary*)modelCustomPropertyMapper {
return@{@"publishDate":@"publish_date",
@"itemsCount":@"items_count",
@"issueID":@"issue_id"
};
}
+ (NSDictionary*)modelContainerPropertyGenericClass {
return@{
@"items":RecipeItem.class
};
}
对于有container的(字典,数据),要写明这些container中的元素的类是什么。运用YYModel不需要继承,而mantle需要。YYModel是以category的形式集成的,无侵入性。另外还有MJExtension。
好了,今天就写这么多把。以后会开启复习笔记的模式, 把evernote中的学习记录一个个过一遍,加深印象。另外,考试fighting!