iOS开发实践:一个类微博客户端从启动到与用户交互的过程

本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现。数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础。

数据字典实际上是一张表,表的第一个字段是程序代码中的标识符,其它字段具体描述它在线程中被如何使用,以及它所依赖的其它元素,数据字典中各个标识符基本上也是按照线程的执行流程来排序。

数据流图是一个平面拓扑结构,每个节点或者是外部数据,或者是可被线程执行的代码模块。从外部数据到代码模块的边意味着线程在执行代码模块的时候需要用到外部数据,从代码模块到代码模块的边则表示线程执行完成一个代码模块后跳转到另一个代码模块开始执行。其它类型的边没有具体含义。

数据字典

· 线程启动,执行函数main。

· int main(int argc, char *argv[])

—— 线程首先跳转到函数main所在的代码块,然后可以跳转到函数UIApplicationMain。

· int UIApplicationMain (

int argc,
char *argv[],
NSString *principalClassName,
NSString *delegateClassName
);

—— 线程调转到函数UIApplicationMain所在的代码块,然后在内存中创建两个分别引用了应用本身和应用代理的内存块,其实就是UIApplication类(子类)和SAAppDelegate类(子类)的实例;然后调转到 app delegate 实例,执行 applicationDidFinishLaunching 方法中定义的代码;然后线程跳转到UIApplication的实例,根据实例中的字段和类中定义的代码,进入等待接收事件的状态;如果线程接收到界面控件点击事件,就跳转到引用了这个控件的内存块(控件对象),根据内存块中的字段值和控件类中定义的代码执行相应的过程,最后重新等待其它事件;如果线程接收到用户终止了进程的事件,就跳转到 app delegate 实例,执行 applicationWillTerminate 中的代码,然后再跳转到main函数,执行 return 语句终止自己。

· UIApplication

—— 类UIApplication以及它在内存中的实例中定义的代码和数据, 可以告诉线程应该如何修改和获得与应用程序相关的信息,如何进入事件循环,线程等待各种事件,跳转到相应的代码位置。

· SAAppDelegate

—— 类SAAppDelegate以及它在内存中的实例中定义的代码和数据,可以告诉线程如何处理与应用程序相关的事件,如何获取数据模型等等。

·  applicationDidFinishLaunching

—— 线程从UIApplication类或实例中的代码跳转到这个函数中,然后在内存中创建一个UIWindow类的实例,这个实例可以引用一个可以承载可视化元素的窗口,然后线程在内存创建一个控制器类SAMainController或SAOAuthController或SANewfeatureController类的实例,在把UIView的实例创建到内存后,调用 viewDidLoad 方法配置 view 对象中的各个字段。然后跳转到UIWindow类的代码中,设置内存实例的字段值,并把这个ViewController的实例作为窗口的根元素,然后跳转到 makeKeyAndVisible的代码中,根据根元素实例包含的UIView实例,画出窗口中的界面元素,期间会跳转到控制器实例的 viewWilAppear 等方法,执行完成后跳转回UIApplication实例,进入等待事件的状态。

数据流图(顺序图)

ps:

关于为什么要调用 performSelectorOnMainThread 才能更新界面: 因为程序员无法直接调用绘图函数,如果让程序员创建的线程来更改控件对象,那么就仅仅是改变了内存中某个实例的字段值,主线程却没有收到界面更新的事件,仍然处于阻塞状态,界面就不会更新。问题在于主线程是否会在下一次事件循环结束后更新界面。

时间: 2024-08-11 15:53:09

iOS开发实践:一个类微博客户端从启动到与用户交互的过程的相关文章

iOS开发实践:一个完整微博客户端的实现

本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序代码中的标识符,其它字段具体描述它在线程中被如何使用,以及它所依赖的其它元素,数据字典中各个标识符基本上也是按照线程的执行流程来排序. 数据流图是一个平面拓扑结构,每个节点或者是外部数据,或者是可被线程执行的代码模块.从外部数据到代码模块的边意味着线程在执行代码模块的时候需要用到外部数据,从代码模块

iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(一)

iOS开发UI篇-以微博界面为例使用纯代码自定义cell程序编码全过程(一) 一.storyboard的处理 直接让控制器继承uitableview controller,然后在storyboard中把继承自uiviewcontroller的控制器干掉,重新拖一个tableview controller,和主控制器进行连线. 项目结构和plist文件 二.程序逻辑业务的处理 第一步,把配图和plist中拿到项目中,加载plist数据(非png的图片放到spooding files中) 第二步,字

iOS 开发实践之 Auto Layout

原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自动布局)在实际项目中的使用. Auto Layout 在 2012 年的 iOS 6 中发布,距今已经 2 年多了,如果从 2011 年在 Mac OS X 上发布的 Auto Layout 开始算起,已经超过 3 年了.如果你的简历上写着 2 年以上工作经验,而竟然不会使用 Auto Layout

iOS 开发实践之Auto Layout(From Vincent Sit)

本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自动布局)在实际项目中的使用. Auto Layout 在 2012 年的 iOS 6 中发布,距今已经 2 年多了,如果从 2011 年在 Mac OS X 上发布的 Auto Layout 开始算起,已经超过 3 年了.如果你的简历上写着 2 年以上工作经验,而竟然不会使用 Auto Layout,真有点不可思议. 本文将会通过若干个 Demo 进行讲解,通过实践来理解 Auto Layout 到底是什么

iOS开发实践之GET和POST请求

iOS开发实践之GET和POST请求 GET和POST请求是HTTP请求方式中最最为常见的.在说请求方式之前先熟悉HTTP的通信过程: 请求 1.请求行 : 请求方法.请求路径.HTTP协议的版本 GET /MJServer/resources/images/1.jpg HTTP/1.1 2.请求头 : 客户端的一些描述信息 Host: 192.168.1.111:8080 // 客户端想访问的服务器主机地址 User-Agent: Mozilla/5.0 (Macintosh; Intel M

iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息

Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息.在这个过程我是遇到很多的问题,但是大部分都顺利解决了,相信如果你的项目有类似的地方我的项目里面也能够给你提供一定的帮助,如果需要,可以给我留言或者在Github上联系我. UI简陋,暂未完善.有UI大师指点就最好了. 这个应用我是从开始学后为了实践自己的能力一直在

iOS开发常用工具类

iOS开发常用工具类(提高开发的工作效率) 前言 作为一个开发者应该学会去整理收集开发常用的工具类,这些复用的工具可以在项目开发中给你很大程度提高你的工作效率.难道你不想早点完成工作,然后出去撩妹.陪女朋友或者回家陪老婆孩子吗?反正我想早点回家??. 一.常用的宏定义 善于利用宏在开发中过程中会减少很多工作量比如定义开发过程中的常用尺寸,这样在后续开发中不用为了改一个相同尺寸而满世界的去找这个尺寸在哪用到了.宏定义用的很广泛,例如屏幕的宽高,网络请求的baseUrl等等下面是自己整理的一些示例:

iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)

大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wzpziyi1/GroupPurchase 主要实现的功能,用UICollectionViewController展示团购数据,根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除,友盟分享的集成,利用UIView+AutoLayout写布局,实现地图定位.自定义大头针等 整个项

iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付

产品中接入了微博/微信的第三方登录分享功能.微信和支付宝的第三方支付功能,之前在开发过程中涉及到这些部分,于是抽空将接入过程梳理了一遍. 1.微博.微信.支付宝SDK相关接入设置 (1)微博SDK SDK下载 设置URL Scheme,用于从第三方应用或浏览器中启动app 将SDK添加到工程中(支持CocoaPods),app启动时(didFinishLaunchingWithOptions)注册appkey 重写AppDelegate 的handleOpenURL和openURL方法,其它引用