一起养成写作习惯!这是我参与「日新计划 4 月更文挑战」的第3天,点击查看活动详情。

2017年国庆后lucio开始由Android开发转做iOS开发了,在这之前lucio可是什么苹果产品都没用过的小白,这里po一下小白的iOS开发学习历程,包括看的书、视频、文章,看看lucio如何从小白快速(并不快┓( ∀` )┏其实)入门iOS开发的。

1. Objective-C语言入门

《Obje通信大数据行程卡怎么翻译ctive-C基础教程》,很好。这里整理下后面几章的学习笔记,方便ios是什么意思复习。

《Objective-C基础教程》第8章 Foundation Kit介绍

《Objective开源-Candroid下载安装基础教程》第9章开源 内存管理

《Objective-C基础教程》第10章 对象初始化

《Objective-C基础教程》第11章 属性

《Objective-C通信大数据行程卡基础教程》第Java12章 类别

《Objectiv通信地址e-C基础教程》第13章 协议

《Objective-C基础开源节流教程》第14章 代码块和并发性

2. iOS开发入门

(1) 斯坦福白胡子老头iOS8视频

斯坦福大学公开课:iOS 8开发

这个公开课每个iOS版本都有通信达,基本是用一个demo来讲解iOS开发,每个版本的demo都不一样,iOS7是用Objective-C的,Java我也是看完了才知道,但看iOS8的课程也是能同步用Objective-C完成demo的,两边的ios越狱方法名称完全一样,只有语法的不同。

贴一下里面关于MVC模式的讲解

MVC模式

  1. Model与View不能通信:Model与UI完全独立,UI组件都是generic的javascript,需要Controller为其翻译并格式化Model的信息用于显示。
  2. Controller->View:View里的UI组件以outlet形式存在于Controlleios模拟器r中。
  3. View->Controller:Controller自己注册t开源中国arget,告诉View当有指定的通信技术action(如按钮点击)发生时,发送这个action给我这个targios越狱et。View通过delegate将should、will、did等动作的响应交给Control通信工程ler处理。View不拥有其显示的数据,它是通过data sandroid是什么系统ource(也算一种特殊的delegate)从Controller那里拿数据,而数据来自Mode通信达l。
  4. Model->Controller:Model将自己的属性变化通过广播发送给感兴趣的订阅者(一般是Controller),Noti通信达fication & KVO,然后Controller去Model中取新的数据。

(2) 《疯狂iOS讲义》

看随书的源码可以快速android的drawable类了解各种控件的使用,以及图形、动画相android下载关知识。

3. 阅读与思考

Part 1 – 代码规范

(1) 代码风格

Round 1ios下载 – Raywenderlich.com开源节流官方代码风格指南 :]

The official raywenderlich.com Objective-C style guide.

中文翻译:blog.it985.com/10771.html

需要多注意里面一些细节的东西:

  1. copy和通信技术strong的选择:把一个对象赋值给一个属性变量,当这个对象变化了,如果希望属性变量变化就使用strong属性,如果希望属性变量不跟着变化,就是用copy属性。
  2. 推荐使用代码提示中宏定义的NS_ENUM()枚举模块来创建,它可以提供更严谨的类型检测和代码补完功能。
  3. 私有变更应该在类的私有类别中,不需要加private等词语来进行修饰ios15
  4. 私有类别可以在命名为<headerfile>+Private.h的文件里提供。
  5. iniiOSt方法中返回值使用insandroidstudio安装教程tancetype取代id作为返回。[原因]
  6. 单例必须线程安全。
  7. :]
Round 2 – 总结自己的View层的组织规范

通信人家园结一套自己的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点:

Round 3 – 惰性初始化的优劣

Good or ba通信工程专业d practice? Initializing objects通信大数据行程卡 in getter

lazy initios15ialization,开源矿工对于需要判空的,线程不安全的以及自通信地址动优化相关的属性需要多加考虑,原因如上。

(2) iOS工程的目录结构

Round 1 – iOS项目工程及目录结构

iOS项目工程及目javascript录结构

区分不同层次的通用组件。

  • General Level, 最通用的组件,可以在不同项目里复用。
  • Proj开源代码网站githubect Level, 可以在该项目里开源软件复用。
  • Sectiandroid下载on Level, 可以在某个功能模块里复用开源阅读
Roun开源阅读app下载安装dios应用商店 2 – 参考例子

iOS 项目的目录结构能看开源众包出你的开发经验

两个例子可以大概参考下。

Part 2 – 第三方库

(1通信地址) iOS开发的包管理

CocoaP通信地址是写什么地址ods

Coc通信行程卡oa通信大数据行程卡Pods安装和使用教程

Carthage

Carthage 包管理工具,另一种敏捷轻快的 iOS & MAC 开发体验

CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载,集开源节流成,然后修改或者创建我们项目的 workspace 文件,这一系列整体操作。

相比之下,Carthage 就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的androidstudio安装教程项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的开源众包第三方库,将他们下载到本地,然后使用 xcodebuild 构建成 framework 文件。然后由我们自己将这些库集成到项目中。Carthage 使用的是一种非侵入性的哲学。

(2) 常用的开源软件第三方库

Mason通信地址ry

Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明java模拟器了 并具开源是什么意思有高可读性 而且同时支持 iOS 和 Max Oios模拟器S X Masonry介绍与使用实践

AFNetworking

AFNetWorjava环境变量配置king一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架 IOS 网络请求之 AFNetWandroid是什么系统orking 3.x 使用

FMDB

FMDB是iOS平台的SQLiandroid下载安装te数据库框架,FMDB以OC的方式封装了SQLite的C语言API [iOS]数据库第三方框架FMDB详细讲开源代码网站github解 FM开源节流DB 使用方法

libextobjc

libextobjc一个提供语言级别各种小功能的库

FLEX 应android平板电脑价格用内调试神器

SDWebImage 图片加载框架

Reachability 检测手机网络状态

MJRejavascriptfresh 下拉刷新,上android是什么系统拉加载更多组件

Toast Toast

MBProgressHUD 半透明提示框

DateTools 用于提高Obandroid是什么手机牌子jective-C中日期和时间相关操作的效率 DateTools使用「日期工具库」

更多:

iOS开发常用三通信人家园方库、插件、知java怎么读名博客通信地址等等

iOS 第三方库、插件、知名博客总结

Part 3 – 技巧篇

(1) 自动布局

Round 1 – UIScrollview与Autolayout

UIScrollview与Autolaandroid的drawable类yout

scrollViewios是苹果还是安卓比较特殊,因为它有个co开源软件ntentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。

为了正常显示,使用一个单一的containerView占满全部,然后把所有的subvie通信地址是写什么地址w添加到containerView中。(亲测)

Round 2 – 约束代码何处安放

Where should I be setting autolayout constraints wandroid的drawable类hen creating views programmandroid的drawable类atical开源中国ly?

**How to Use updateConstraints? **

updateViewConstraints与updateConstraint通信s可以在需要更新大量约束时重写,对于只初始化一次而不需要修改的约束,写到类似于viewDidLoad的方法中比较好。

Round 3 – 一个坑

The Mystery of the +requiresConstraintBasedLayout

基于约束的布局是懒触发的,只有在添加了约束开源阅读的情况下,系统才会自动调用 -updateConstraintios15s 方法,如果把所有的约束放在 updjava是什么意思ateConstraints中,那么系统将会不知道你的布局方式是基于约束的ios是什么意思,所以重写+requiresConstraintBasedLayout 返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法 从而正确添加约束。

(2) weakSelf

透彻理解block中weakSelf和strongandroidstudio安装教程Selfandroid平板电脑价格

__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];
}];

(3) iOS应用android下载安装数据存储

iOS本地数据存取通信地址,看这里就够了

  1. XML属性列表(plist)归档
  2. Preference(偏好设置)
  3. NSKeyedArchiver归档(NSCoding)NSKeyedArchiver–对象归档
  4. SQLite3
  5. Core Data
// TODO: 2017/10/23 继续完善本文直到结束入门

When they are ne通信技术eded, comments should be used to explai开源n why a particuandroid什么意思lar piece of code does something. Any comments th开源矿工atJava are used must be kept up-to-date orios15 deletejava语言d.

——The officijavascriptal raandroid是什么系统ywenderlich.com Objectiv通信工程e-C style guide.

(4) iOS单例模式

JAVA设计模式之单例模式

使用dispatcandroid是什么手机牌子h_once创建单例

(5) UI适配

Round 1 – ViewController的布局

ViewController的几个开源阅读app下载安装属性:edgesForExtendedLayout、automat通信地址是写什么地址iandroid的drawable类callyAdjustsScrollViewInandroidstudio安装教程sets、extendedLayoutIncludesOpaqueBars

www.jianshu.com/p通信地址是写什么地址/ea9ios是什么意思e19b7d…

www.jianshu.com/p/9884f1307java是什么意思

Round 2 -如何做好通信地址是写什么地址IOS View的布局

如何做好IOS View的布局

  • 如何布局UIViewController的view
  • childViewConandroid是什么系统troller的处理
  • Autolayoutandroid下载安装来布局
  • tableView管理

布局原则:

  • 屏幕尺寸变化时能自适应,如不同尺寸设备,屏幕旋转,热点,电话等。
  • 无论是否有android平板电脑价格navigationBar或tabBar都能够正常显示,且最好不需要自己去判断有没有navigationBar或tabBar
  • 尽量避免hard code间距,如20,44,49等

(6) Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法

《Effective Objective-C 2.0:编写通信工程专业高质量iOS与java面试题OS X代码的52个有效方法》阅读笔记