国庆后lucio开始由Android开发转做iOS开发了,在这之前lucio可是什么苹果产品都没用过的小白,这里po一下小白的iOS开发学习历程,包括看的书、视频、文章,看看lucio如何从小白快速(并不快┓( ´∀` )┏其实)入门iOS开发的。
《Objective-C基础教程》,很好。这里整理下后面几章的学习笔记,方便复习。
《Objective-C基础教程》第8章 Foundation Kit介绍
《Objective-C基础教程》第9章 内存管理
《Objective-C基础教程》第10章 对象初始化
《Objective-C基础教程》第11章 属性
《Objective-C基础教程》第12章 类别
《Objective-C基础教程》第13章 协议
《Objective-C基础教程》第14章 代码块和并发性
斯坦福大学公开课:iOS 8开发
这个公开课每个iOS版本都有,基本是用一个demo来讲解iOS开发,每个版本的demo都不一样,iOS7是用Objective-C的,我也是看完了才知道,但看iOS8的课程也是能同步用Objective-C完成demo的,两边的方法名称完全一样,只有语法的不同。
贴一下里面关于MVC模式的讲解
MVC模式
看随书的源码可以快速了解各种控件的使用,以及图形、动画相关知识。
The official raywenderlich.com Objective-C style guide.
中文翻译:http://blog.it985.com/10771.html
需要多注意里面一些细节的东西:
NS_ENUM()
枚举模块来创建,它可以提供更严谨的类型检测和代码补完功能。private
等词语来进行修饰。+Private.h
的文件里提供。init
方法中返回值使用instancetype
取代id
作为返回。[原因]总结一套自己的View代码规范,日后需要慢慢完善。
// 通用viewController/view代码结构
#pragma mark - LifeCycle Menthod
- (void)viewDidLoad {
[super viewDidLoad];
[self initView()];
[self initData()];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (instancetype)init {}
- (void)dealloc {}
#pragma mark - Delegate Menthod
#pragma mark - Event response
- (void)xxxClick(){
}
#pragma mark - Public
#pragma mark - Private
- (void)initView{
//DO initView
[self initConstrains()];
}
- (void)initConstrains{
//DO initConstrains
}
- (void)initData{
//DO initData
}
#pragma mark - getter && setter
// 1. 属性(特别是View)的初始化放在getter,在initView里面只addSubview。
// 2. 关于第1点的lazy initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑。
// 3. initConstrains用于初始化约束,尽量使用makeConstraints,如果约束需要动态更新,重写updateViewConstraints或updateConstraints
关于注释第2点:
Good or bad practice? Initializing objects in getter
lazy initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑,原因如上。
iOS项目工程及目录结构
区分不同层次的通用组件。
iOS 项目的目录结构能看出你的开发经验
两个例子可以大概参考下。
CocoaPods安装和使用教程
Carthage 包管理工具,另一种敏捷轻快的 iOS & MAC 开发体验
CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载,集成,然后修改或者创建我们项目的 workspace 文件,这一系列整体操作。
相比之下,Carthage 就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后使用 xcodebuild 构建成 framework 文件。然后由我们自己将这些库集成到项目中。Carthage 使用的是一种非侵入性的哲学。
Masonry
Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X Masonry介绍与使用实践
AFNetworking
AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架 IOS 网络请求之 AFNetWorking 3.x 使用
FMDB
FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API [iOS]数据库第三方框架FMDB详细讲解 FMDB 使用方法
libextobjc
libextobjc一个提供语言级别各种小功能的库
FLEX 应用内调试神器
SDWebImage 图片加载框架
Reachability 检测手机网络状态
MJRefresh 下拉刷新,上拉加载更多组件
Toast Toast
MBProgressHUD 半透明提示框
DateTools 用于提高Objective-C中日期和时间相关操作的效率 DateTools使用「日期工具库」
更多:
iOS开发常用三方库、插件、知名博客等等
iOS 第三方库、插件、知名博客总结
UIScrollview与Autolayout
scrollView比较特殊,因为它有个contentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。
为了正常显示,使用一个单一的containerView占满全部,然后把所有的subview添加到containerView中。(亲测)
Where should I be setting autolayout constraints when creating views programmatically?
How to Use updateConstraints?
updateViewConstraints与updateConstraints可以在需要更新大量约束时重写,对于只初始化一次而不需要修改的约束,写到类似于viewDidLoad的方法中比较好。
The Mystery of the +requiresConstraintBasedLayout
基于约束的布局是懒触发的,只有在添加了约束的情况下,系统才会自动调用 -updateConstraints 方法,如果把所有的约束放在 updateConstraints中,那么系统将会不知道你的布局方式是基于约束的,所以重写+requiresConstraintBasedLayout 返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法 从而正确添加约束。
透彻理解block中weakSelf和strongSelf
__weak __typeof(self)weakSelf = self;
[self.context performBlock:^{
__strong __typeof(weakSelf)strongSelf = weakSelf;
[strongSelf doSomething];
}];
当block直接或间接的被self持有时,需要weakSelf。其他情况下加weakSelf也没什么问题。
使用libextobjc库可以简化下代码:
#import "EXTScope.h"
@weakify(self)
[self.context performBlock:^{
@strongify(self)
[self doSomething];
}];
iOS本地数据存取,看这里就够了
// TODO: 2017/10/23 继续完善本文直到结束入门
When they are needed, comments should be used to explain why a particular piece of code does something. Any comments that are used must be kept up-to-date or deleted.
——The official raywenderlich.com Objective-C style guide.
JAVA设计模式之单例模式
使用dispatch_once创建单例
ViewController的几个属性:edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars
http://www.jianshu.com/p/ea9e19b7d69f
http://www.jianshu.com/p/9884f13074b8
如何做好IOS View的布局
布局原则:
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》阅读笔记
// TODO: 2017/10/25 不再更新,之后学到的知识单独分类整理