文档章节

从Android到IOS,IOS应用生命周期函数

爱看博客
 爱看博客
发布于 2015/10/22 10:06
字数 1063
阅读 5
收藏 0
点赞 0
评论 0

由于对于自己的C基础还算满意,花了一个月断断续续的把OC看完了,最近在看一些IOS开发的知识。初次创建一个IOS项目,xCode会自动生成这些文件与目录

从头开始,应用首次执行会先从main函数开始执行。

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

看到源码中UIApplicationMain()方法的注释:

// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no
// NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init.
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

如果第三个参数为nil,则表示从info.plist中读取。大家可以把info.plist理解为Android中的Manifest文件,用于让编译器知道本应用的一些基本信息。

第四个参数是应用的托管类类名,这里大家可以先把托管类理解为一个Activity.class。

在Android中的Application类,通过Application去回调Activity各个生命周期函数。IOS也一样,首先UIApplicationMain()方法根据我们提供的AppDelegate类名称来创建并初始化UIApplication的一个实例,并将AppDelegate作为UIApplication的委托,并调用AppDelegate中各生命周期方法。


就如同Android中Application类中拥有一个包含Activity各生命周期函数的接口一样(具体请查看Application类中的声明:interface ActivityLifecycleCallbacks 这里就不多做解释了)我们通过查看UIApplication类也可以发现一个类似的协议。篇幅有限,这里只列出AppDeletegate类中显式列出的六个方法

@protocol UIApplicationDelegate<NSObject>

@optional
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationWillTerminate:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
- (void)applicationWillEnterForeground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);

那么这六个方法也就是IOS应用中的六个生命周期方法。具体验证规则也就不多说了,大家自己打个log看看在应用各状态时的回调就行了。其实从名字也就基本可以理解个大概了。参照Activity生命周期几个方法回调的图示,我也自己总结了AppDelegate的几个方法回调图示算是一种笔记吧。

ViewController,这个类我的理解就是用于做一些View定义以及初始化相关的操作。类似于Android中一个Activity的DecorView(如果你要问DecorView是什么。。。就当成是setContentView中传进去的View吧)。

在Android中每一个应用可以有多个Window对象,因为每个Activity都有一个Window,而在IOS中,只有一个Window(至少目前我我的水平只知道一个),那么跳转界面的实现实际上就是切换这个ViewController来实现的。就好像Activity中切换Fragment来实现页面跳转一样。


再接下来讲storyboard,这个实际上就是一个用于拖控件去实现布局的文件。不过与Android中的layout.xml不同,Android中总共有三种方法去创建布局,第一种就是纯拖控件,第二种是手动写xml代码,第三种是手动写java代码,这里我就不多说了。在IOS中只有两种选择,纯拖控件,手动写OC代码。是的,拖控件的那个storyboard文件你不能用代码去编辑它(或者说我还不会编辑它)。所以现在引起了很多争议,有些人说为了维护方便应该提倡用代码布局,有些人说根据发展趋势,更应该去使用拖控件的方式。作为一个从Android转过来的开发者,我建议你去用代码实现,一来与Android中一样,写代码布局能让你更方便的理解控件在界面上的绘制过程,另一方面作为一个新手,多熟悉一下代码也是好事吧。

再往下,有一个IOS3Test文件夹,书本上说是用来写单元测试的,所以目前不需要过多考虑。

再往下,product文件夹,相当于Android中的bin目录,其中用来存放编译后的文件的。

版权声明:本文原创,转载请注明来自 http://kymjs.com/

© 著作权归作者所有

共有 人打赏支持
爱看博客
粉丝 5
博文 103
码字总数 23887
作品 0
深圳

暂无相关文章

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 51分钟前 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 59分钟前 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 今天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 今天 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部