从 0 开发一款 iOS App
朱德权
腾讯高级工程师
24183 人已学习
新⼈⾸单¥59
课程目录
已完结/共 106 讲
第一章:课程简介和开发前的准备 (4讲)
第二章:实现App的基本界面 (33讲)
第三章:实现App的基础功能 (35讲)
时长 18:24
第四章:App功能扩展和完善 (34讲)
从 0 开发一款 iOS App
登录|注册
留言
7
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 52 | GCD的常用方法分析和使用
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 常见App类型及技术栈浅析
04 | 使用Xcode创建第一个工程
05 | MVC模式:iOS中的架构基石
06 | iOS中的视图UIView
07 | 了解UIView的生命周期
08 | 视图的控制器UIViewController
09 | 结合视图和控制器构建Tabbar样式页面
10 | 使用Navigation构建App的基础交互
11 | iOS基本页面框架的构成和实现
12 | 系统函数中常见模式Delegate
13 | UITableView简介
14 | UITableView中Delegate和Datasource的使用
15 | UITableViewCell的复用及原理
16 | 结合子视图实现完整的列表界面
17 | UICollectionView的基本应用和实现
18 | UICollectionViewLayout的应用
19 | 基本列表视图的选择和使用
20 | 滚动视图的基类UIScrollView简介
21 | 应用UIScrollViewDelegate实现复杂逻辑
22 | iOS中滚动视图对比及App内应用场景浅析
23 | iOS中文字的展示:UILabel的使用与布局
24 | iOS中图片的展示:UIImage与UIImageView的应用
25 | iOS中按钮的实现:UIButton的使用
26 | UIControl以及Target-Action模式
27 | 使用UIGestureRecognizer实现自定义点击与手势
28 | 通过UIAlertView了解UIKit系统函数的设计和使用
29 | Web基础知识及WKWebView 介绍
30 | 使用WKWebView及Delgate实现简单的页面加载
31 | 认识观察者模式KVO并展示页面加载进度
32 | iOS开发中的Web应用浅析
33 | 使用UIView动画完善界面的交互
34 | 动画背后的CALayer基本应用
35 | CoreAnimation及开源动画框架介绍
36 | 常用代码规范和重构方式
37 | 结合UIKit分析常用App的页面结构
38 | 网络基础及请求的封装
39 | NSURLSession基础原理、组织和使用
40 | 使用系统网络架构NSURLSession加载网络数据
41 | 常用框架集成方式Submodule、Carthage和CocoaPods对比和使用
42 | 集成和使用开源网络框架
43 | iOS中的JSON解析
44 | 使用结构化的数据进行解析和展示
45 | 实现列表数据加载、解析和展示的完整流程
46 | iOS沙盒机制和文件结构
47 | 使用NSFileManager操作和管理文件
48 | iOS中的序列化NSCoding
49 | 开源存储方案对比与分析
50 | 缓存新闻列表数据及已读状态
51 | iOS中线程的基础知识及NSThread
52 | GCD的常用方法分析和使用
53 | 了解Operation、Runloop以及多线程开发总结
54 | 如何管理App中的图片下载与存储
55 | 开源图片框架接触的架构和使用
56 | 了解iOS系统的音视频框架
57 | 重构视频列表展示视频
58 | 实现简单视频播放器AVPlayer
59 | iOS消息机制NSNotification简介
60 | 使用Notification接收和处理播放状态通知
61 | 使用KVO监听和处理播放资源的状态变化
62 | CMTime及播放缓冲进度的获取和使用
63 | 使用单例模式重构播放器业务逻辑
64 | 常用App视频业务及流程浅析
65 | AutoLayout简介
66 | 使用AutoLayout实现通用ToolBar视图
67 | iOS常用布局方式选择
68 | 逻辑分辨率适配
69 | 物理分辨率适配
70 | 使用ImageAsset管理图片资源
71 | iPhone X适配
72 | iOS开发适配常用方法总结
73 | App启动过程及生命周期分析
74 | 通过App生命周期回调实现启动页
75 | 使用URL Scheme进行App间的唤起和通信
76 | Universal Link简介
77 | 常用组件化Target-Action方案
78 | 常用组件化URL Scheme方案
79 | 常用组件化Protocol-Class方案
80 | 实现简单的第三方登录和分享功能
81 | iOS中静态库的制作和使用
82 | iOS当中Framework的制作和使用
83 | OAuth和OpenID原理和使用
84 | 集成QQ SDK实现登录和分享功能
85 | iOS中常用日志和上报系统浅析
86 | 类CocoaLumberjack日志框架架构浅析
87 | Crash的类型介绍和常用收集方案
88 | 常用上报技术方案对比和分析
89 | iOS中定位和定位权限
90 | 定位功能实现和位置信息的获取
91 | iOS中推送和推送权限
92 | 使用UserNotifications实现本地推送
93 | 远程推送与APNs简介
94 | 使用UserNotifications接收远程推送
95 | iOS图标管理和动态更新
96 | iOS App Extension简介
97 | 实现Today Extension以及数据共享
98 | UITextField和UITextView
99 | 使用UITextField实现搜索条
100 | 使用UITextView实现输入框
101 | 复杂列表页实现方案及IGListKit浅析
102 | 复杂内容页展示逻辑及实现方案浅析
103 | App的签名原理和证书申请
104 | 常用iOS唯一标识符
105 | App的打包和上架流程
106 | 结课测试&结束语
本节摘要

PDF 课件和源代码下载地址:

https://gitee.com/geektime-geekbang/geektime-ios-course

登录 后留言

全部留言(7)

  • 最新
  • 精选
ME进哥哥
主线程执行最好使用同步

作者回复: 不对哈。就像在课程中说的,同步和异步,与主线程和非主线程,不是一个维度的概念哈。我们可以生成任意的线程,而系统UI绘制的线程成为主线程。在任何线程我们都可以同步执行或者异步执行我们的代码,同步和异步一般来说,都是指在同一个线程中的执行顺序。

2020-05-12
1
沙亮亮
gcd的主队列的异步任务执行原理是啥样的,主队列里不能开子线程,只能用主线程

作者回复: 这里可以深入的了解一下Runloop的原理和应用。由于课程的定位这里没有深入的进行讲解,不是特别严谨,可以简单的理解为如果在mainQueue中执行dispatch_async,block中的代码不会再当前的runloop中执行,从现象上来看就是会先执行GCD下面的代码,然后在之后的runloop中执行gcd当中的代码。

2019-08-09
2
1
Geek_b7eb88
同步和异步是相对目前进程中多个线程而言的,同步执行多个线程,线程之间会等待。异步执行多个线程,线程之间不会等待。 串行和并行是相对一个线程里面的多个任务而言的,一个线程如果串行多个任务,任务之间也会等待。并行多个任务,任务之间不会等待。 视频中异步执行并发队列加载图片,只是因为我们只做了加载了一个图片的任务,不能够很明确的表现并发的概念。我们异步执行一个串行队列也能达到这样的效果吧?过如果回调里面加载多个图片资源是不是更能说明并发的概念。

作者回复: 这个理解是不对的。同步和异步是目的,多线程是实现异步的手段。同步、异步和多线程没有一一对应的关系。同一个线程可以是同步也可以是异步。同时异步和并发也没有关系,并发通常是为了提高利用率,而异步通常是为了保证结果不阻塞当前执行。

2020-06-11
3
罗十十十
``` dispatch_queue_global_t downloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_queue_main_t mainQueue = dispatch_get_main_queue(); ``` 这俩变量 我用*号开头,例如*downloadQueue, 会报错: ``` Implicit conversion of an Objective-C pointer to '__strong dispatch_queue_global_t *' (aka 'NSObject<OS_dispatch_queue_global> *__strong *') is disallowed with ARC ``` 不知道 老师的为啥没报错 -。-

作者回复: 回顾了下视频,在10分到12分左右的代码,视屏中没有写*呀,不知道是不是哪里遗漏了。回归这个问题,dispatch_queue_global_t 我们看下他的定义,是typedef NSObject<OS_dispatch_queue_global> *dispatch_queue_global_t; 所以是不需要,也不应该使用*的。

2020-03-06
Geek__2099
串行与并行,是针对多个线程之间执行顺序说的。异步与同步是针对代码块与代码块之间执行顺序的。 线程之间关系,强调了 代码执行所处的物理资源是独立的。不同线程内的代码之间,作为一个整体,关注在业务上是否有前后依赖关系。 有:是串行;没有:是并行。 代码块之间关系,强调了代码执行背后的业务逻辑是相关的,与可承载的物理资源是否独立无关,即是否需要在同一线程中 这个决策的依据,是由其业务逻辑关系来决定。它同样在业务上关注是否有前后依赖关系。 如果执行顺序必须是先后关系,那么就是同步关系。 如果执行顺序不要求是先后关系,那么可以是同步关系,也可以是异步关系。 如采取异步关系,考虑的是效率等非业务正确性因素。如不影响主线程的业务目标,异步不必须用多线程来实现。 只有认为异步在主线程中会影响主线程目标时,才需向系统申请额外的物理资源投入,就是非主线程,来协助完成。 但是申请了单独的物理资源,在执行时与主线程之间是并行还是串行,这个是由业务判断的。 本视屏中,没有指明先后关系,应该是并行执行的。而系统得到了这个判断后,自行调度在时间轴上,两线程代码执行没有先后约束,即并行执行。 本文中图片下载处理,先考虑到避免影响ui主线程中代码执行,故采取异步执行。所以在执行异步前,先申请单独的非主线程资源,然后在该资源中执行下载代码块。 而下载处理完成后,再将显示图片的代码块,调度到主线程中运行。而这个调度何时发起,因只有非主线程知道,所以发起调度指令的代码也要放在非主线程的代码块中。 关于调度的原理和机制,是由系统的runloop模块负责的。 本文中,编写的代码默认是在主线程中执行的,这是一个前提。 图片下载和处理,这部分代码块,由于
2021-03-29
1
Ericpoon
非主队列,是什么时候创建的请问,是app启动时一并创建,还是我们调用get_queue时想创建?谢谢🙏!
2023-09-29
Geek_b7eb88
老师可以详细说一下,同步,异步,与串行,并发有什么关系吗。视频中是创建了并发的线程,并且异步执行了。可以说一下哪里体现了异步执行,哪里体现了并发吗? 并且在GCD的block回调中是要防止循环引用的吧?
2020-06-11
收起评论