
国庆后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模式
Model与View不能通信:Model与UI完全独立,UI组件都是generic的,需要Controller为其翻译并格式化Model的信息用于显示。Controller->View:View里的UI组件以outlet形式存在于Controller中。View->Controller:Controller自己注册target,告诉View当有指定的action(如按钮单击)发生时,发送这个action给我这个target。View通过delegate将should、will、did等动作的响应交给Controller处理。View不拥有其显示的数据,它是借助data source(也算一种特殊的delegate)从Controller那里拿数据,而数据来自Model。 Model->Controller:Model将自己的属性变化通过广播发送给感兴趣的订阅者(一般是Controller)免费ios开发者证书,Notification & KVO,然后Controller去Model中取新的数据。


看随书的源码可以快速知道各类控件的使用,以及图形、相关知识。
The official raywenderlich.com Objective-C style guide.
中文翻译:
需要多留意上面一些细节的东西:
copy和strong的选取:把一个对象数组给一个属性函数,当这个对象变化了,如果期望属性变量变化就使用strong属性,如果期望属性变量不跟着变化,就是用copy属性。推荐使用代码提示中宏定义的NS_ENUM()枚举模块来建立,它可以提供更细致的类别检测和代码补完功能。私有变更应当在类的私有类型中,不需要加private等语句来进行修饰。私有类型可以在命名为<headerfile>+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 第三方库、插件、知名博客总结
UIScrollview与Autolayout
scrollView比较特殊,因为它有个contentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。
为了正常显示免费ios开发者证书,使用一个单一的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本地数据存取,看这儿就够了
XML属性列表(plist)归档Preference(偏好设定)NSKeyedArchiver归档(NSCoding)SQLite3Core Data
// 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
如何做好IOS View的布局
布局原则:
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效途径》阅读笔记
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-122299-1.html
马云自己就靠炒股发财
哈哈哈