精通iOS开发

第1章 欢迎来到iOS和Swift世界

  • 用户按下Home键,iOS就会返回主屏 幕,应用必须尽快保存一切内容并退出。如果没有在5秒之内保存必要的数据并放弃对系统资源的控制,无论是否已经完全保存,应用程序进程都会被终止。
  • Cocoa Touch缺少Cocoa的一些特性,但iOS SDK中也有一些功能是Cocoa目前没有的;比如iOS运动传感器

第2章 创建第一个项目

  • xcode采用LLVM(low level Virtual Machine,底层虚拟机)编译器
  • stroyboard 由一组或多组相对于的视图和控制器构成。
  • iOS Simulator -> Reset Content and Setting...清除模拟器上运行过的应用
  • 启动界面在APP加载内存的时候可以设置启动文件,View->属性检查器

第3章 实现基本交互

  • MVC:模型(应用数据)、视图(窗口控件)、控制器(模型和视图绑定的代码)
  • 输出接口 outlet
  • 现在的xcode都已经默认启动ARC,(ARC 只适用OC的对象和结构体,不能用于Core Foundation对象和C语言的内存分配)
  • stroyboard->view->Label->添加布局约束

第4章 更丰富的用户界面

  • 调整图片和视图大小一致:Command+=
  • Interface Builder中蓝色实线表示布局约束(不是引导蓝色虚线),橙色实线控件与背景视图的位置关系;
  • Interface Builder中调整视图大小是按Option显示辅助线方便调整视图大小
  • Alpha透明属性(0-1):0.0完全透明,1.0完全不透明
  • Drawing.Tint属性视图下方是否需要绘制内容,默认选中会优化当前视图的绘制
  • Clears Graphics Context 绘制视图前是否绘制黑色透明覆盖对象所有区域(默认不选)
  • Clip Subviews 视图与子视图大小不一致时边界显示覆盖控制(默认关闭)
  • Autoresize Subviews视图大小变化时自动调整子视图(默认选中)
  • Stretching矩阵视图大小重绘才拉升
  • 选中所有视图对象,Editor -> Resolve AutoLayout Issues -> Add Missing Constraints,设置约束(默认约束以边缘靠近原则编译时自动创建)
  • stroyboard中选择文本框,按Option+Command+6打开连接检查器,选择操作方法拖动到视图上方的ViewControl
  • Touch Up Inside(按钮控件)和Touch Down(背景按键)区别在于是否关心按下动作离开位置
  • 添加新增控件约束并更新Editor -> Resolve Auto Layout Issues -> Add Missing Constraints 和Update Constraints
  • 方法与接口关联:Ctrl+左键拖动(右键拖动)到代码中
  • Interface Builder中按Option拖动对象创建对象副本
  • 视图中限制位置后(Editor -> Align -> Horizontal Center in Container),还需要右键调整视图位置留出间距(背景转蓝色位置),释放后菜单选择Top Space to Top Layout Guide(垂直方向)以固定控件与视图顶间距
  • 右键拖动控件到左上角,是否鼠标,再Shift跳出菜单选择Leading Space to Container Margin(水平方向+间距) 和 Top Space to Top Layout Guide,完成添加约束
  • 按钮切片:Show Slicing按钮后,进行水平和垂直的拉升

第5章 自动旋转和自动调整大小

  • 自适应布局,尺寸分类可以实现在选择前后的不同布局

第6章 多视图应用

  • 导航栏、标签栏(工具栏)
  • 多视图情况下一般当前不显示视图延迟加载、已加载的不显示视图在内存不足情况下释放


第7章 分页栏与选取器

  • 分页视图控制器UITabBarController
  • 选取器如UIDatePicker(日期选择器)、UIPickerView(可自定义选择项)

第8章 表视图简介

  • 表视图是向用户显示数据列表的一种常用方式;
  • 表视图(UITableView)只能一列,不限制行数(每行一个UITableViewCell实例)
  • 表视图单元格在界面滚动的时候cell重用
  • 通过UITableViewDelegate定义TableView协议
  • 定制表视图单元:1、向表示图单元添加子视图;2、从nib文件中加载单元;3、从stroryboard中加载单元;
  • 视图调试器:可以对正在运行的APP拍下视图层级关系的快照(调试的时候Debug->View Debugging->Capture View Hierarchy),再用来在编辑器中检查

第9章 导航控制器和表视图

  • 先实现导航控制器和根视图控制器,再为层级结构添加更多的控制器和层;实现表视图与子视图的切换表视图与内容视图切换(详细内容的编辑)、表视图拆分多个分区、编辑模式下的删除、排序
  • 导航控制器 UITableViewController和视图控制器UITableViewController
  • 转场(seuge),一种过度,在两个试图控制器之间的相连的转场;转场也有identifier,表示控制不同控制器过度时的代码逻辑。

第10章 集合视图

  • UICollectionView用于展示集合视图,布局更加灵活,可实现多列布局
  • 自定义单元格用UICollectionViewController替换默认的UIViewController
  • 使用UICollectionView 必须实现UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议

第11章 分割视图和浮动窗口

  • 分割视图master-detail应用程序:MasterViewControl、DetailViewControl
  • nib文件是静态对象图,应用加载时包含对象会全部加载并一直存在;而stroyboard中包含多个场景,可以一部分;
  • 浮动窗口UIPopoverController(只会自行显示并消失)
  • 避免保留连环(retain cycle)的方式其中一个定义成weak(不对对象拥有所有权)

第12章 应用设置和用户默认设置
  • 选择*.plist中的节点右键选中Show Raw Keys/Values,再进行字典字段编辑
  • NSNotificationCenter通知,注册观察者对某个事件,用于配置的更改实时生效;通知是对象之间通信的轻量级机制

第13章 数据持久化基础知识

  • 持久化机制常见方法:属性列表、对象归档、嵌入SQLite3、Core Data
  • 应用沙盒:Documents、Library、tmp
  • Core Data 是数据持久化存储的最佳方式
  • Core Data 在复杂应用中,可以显著减少设计和编写数据模型所需要的时间

第14章 文档和iCloud



第15章 Grand Central Dispatch和后台处理

  • GCD通过将高代价任务推迟执行并调至后台运行的方式来提升App的交互速度
  • GCD提供比锁与多线程更简单的并发模型,以此来避免一些由并发引起的Bug
  • UIActivityIndicatorView 提供轻型视图,会显示一个标准的旋转进度轮,start的时候可以吸附在当前视图中,stop的时候就会移除
  • 代码块(也就是闭包、lanbda);代码块外部变量需要__block 声明,才可以在代码块内部修改外部也生效
  • 后台线程不可以向前台GUI对象发送消息,需要传给主线程处理,在dispatch_async(dispatch_get_global_queue(),代码块中    dispatch_async(dispatch_get_main_queue(),^{...处理GUI对象...})。。。 )
  • dispatch_group_async(group, queue, ^{A}),线程组中并发执行的代码块
  • dispatch_group_notify(group, queue, ^{Z}),线程组中代码块(A\B\C)都执行完毕后,才执行的代码块(Z)
  • NSLog(@"%@", NSStringFromSelector(_cmd));,打印当前函数名,_cmd始终放回当前方法的选择器
  • 程序状态说明:未运行;活跃(屏幕上运行的程序);不活跃(在其他状态之间临时过的的阶段);后台(获取一定时间执行一些代码但无法访问屏幕和用户输入;除非运行需要一般5s后变成挂起);挂起(程序冻结不再执行);
  • 不要通过applicationWillTerminate保存程序运行状态,应该在applicationDidEnterBackground中;因为程序仅在后台状态(音频播放、GPS定位),并且用户或系统强制退出才调用applicationWillTerminate
  • 程序运行时收到短信通知等待触发时,程序会applicationWillResignActive,但并不applicationDidEnterBackground;如果关闭通知则程序applicationDidBecomeActive;如果回复通知则程序applicationDidBecomeActive,再applicationWillResignActive,再applicationDidEnterBackground
  • 程序退出前通过beginBackgroundTaskWithExpirationHandler申请更多的处理时间,endBackgroundTask告诉系统处理完成,可以真正退出
  • dispatch_after(dispatch_time(DISPATCH_TIME_NOW2 * NSEC_PER_SEC),

                           dispatch_get_main_queue(),

                           ^{ 延迟2s 后执行的代码});


第16章 使用CoreGraphics绘图



第17章 SpriteKit游戏框架



第18章 轻点、触摸和手势

  • 手势动作识别器UISwipeGestureRecognizer
  • 轻点动作识别器UITapGestureRecognizer
  • 捏合缩放识别器UIPinchGestureRecognizer

第19章 CoreLocation和MapKit

  • CLLocationManager、CLLocation、CLLocationDistance


第20章 陀螺仪和加速计

  • 加速计测量加速度和重力(三轴加速计),陀旋仪传感器测量设备围绕轴旋转值;
  • CMMotionManager、CMDeviceMotion(CMAccelerometerData and CMGyroData)

第21章 摄像头和照片库

  • 图片控件UIImageView
  • 视频没有控件可以通过控制器里的view实现,如MPMoviePlayerController.view
  • viewDidLoad在试图加载的时候调用,viewDidAppear在试图每次出现的时候调用,所以图片或视频选择或取消选取之后试图的更新可以在viewDidAppear里调用update

第22章 应用本地化

  • NSLocale用户语言和地区首选项
  • NSLocalizedString本地化通过关键字找到对应的配置值


其他

  • #pragma编译器指令(IDE),代码中 "#pragma mark xxxx",为了方便查找和导航代码用的,或者"/ MARK:xxx"
  • 尽量用NSInteger,不用Int,是因为编译器会自动选择合适的目录类型编译(如int64下NSInteger64位)


快捷键:
模拟器
  • shift+command+H,运行放回主界面
  • shift+command+H+H,切换到程序退出的选择页面
  • Option+触摸按键,旋转和捏合
  • Shift+Option+触摸按键,多点触摸滑动
  • Command+左(右)键,旋转设备

xcode
  • 关键字+Option -> ? ,再点击可以得到帮助列表

你可能感兴趣的:(iOS开发)