### iPhone开发概述
沙盒机制( sandbox)
- iOS 中的沙盒机制( Sandbox) 是一种安全体系,它规定了应用程序只能在为该应用程序创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。
- 每一个应用程序都在自己的沙盒内
- 不能随意跨越自己的沙盒去访问别人的沙盒的内容
- 应用程序向外请求或者接收数据都需要经过权限认证
应用程序的五种状态
- Not runing( 未运行) 程序没启动
- Inactive (未激活) 程序在前台运行,不过没有接收到事件.在没有事件处理情况下程序通常停留在这个状态
- Active (激活) 程序在前台运行而且接收到了事件.这也是前台的一个正常的模式
- Background (后台) 程序在后台而且能执行代码,大多数程序进入这个状态后会在这个状态上停留一会. 时间到了之后会进入挂起状态( Suspended). 有的程序经过特殊的请求后可以长期处于 Background 状态.
- Suspended (挂起) 程序在后台不能执行代码.系统会自动把程序变成这个状态而且不会再发出通知.当挂起时,程序还是停留在内存中的,当程序内存
应用状态的生命周期
iOS 加载 app 将要结束时并且 app 程序差不多已经准备好运行的时候会调用这个方法,通常我们需要使用这个方法来完成 app 的初始化和最后设置的一些微调.这个方法调用发生在 app 的 window 和 UI 之前.
- (BOOL)application:(UIApplication *)application didFinishLanunchingWithOption:(NSDictionary *)LaunchOptions
当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如说来电话了、锁屏。通常在这个方法里实现: 停止 timer 和其他周期性的任务、停止任何正在运行的请求、暂停视频的播放、如果是游戏就暂停它、减少OpenGL ES的帧率、刮起任何分发的队列和不重要的操作队列(你可以处理网络请求或者其他时间敏感的后台任务).
- (void)appliWillResignActive:(UIApplication *)application
当应用进入活动状态执行,这个状态刚好和上面的那个方法相反,需要实现任务的重新开始,比如说重新开始 timer, 继续分发队列,提高 OpenGL ES 的帧率.不过游戏要回到暂停状态,不能自动开始.
- (void)applicationDidBecamActive:(UIApplication *)appliction
当程序被推送到后台的时候调用.所以要设置后台继续运行,则在这个函数里面设置即可.在这个方法需要实现:保存用户数据或状态信息,所有没有写到磁盘的文件或信息,在进汝后台时,最后都写到磁盘去,因为程序可能在后台被杀死,释放尽可能释放的内存
- (void)applicationDidEnterBackground:(UIApplication *)application
当程序从后台将要程序回到前台时调用,这个刚还与上面的那个方法相反.
- (void)applicationWillEnterForeground(UIApplication *)application
当程序将要退出时被调用通常使用来保存数据和一些退出前的清理工作.这个需要设置 UIApplicationExitsOnSuspend的键值.
- (void)applicationWillTerminate:(UIApplication *)application
main 函数
- main 函数是程序启动的入口,在 iOS app 中, main 函数的功能被最小化,他的主要工作都交给了 UIKit framework.
# import <UIKit/UIKit.h>
# import "PNAppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool{
return UIApplicationMain(argc,argv,nil,NSStringFromClass([PNAppDelegate class]));
}
}
UIApplicationMain 函数有四个函数,你不需要改变这些参数值,不过我们需要理解这些参数和程序是如何开始的: argc 和 argv 参数包含了系统带过来的启动时间.第三个参数确定了主要应用程序类的名称,这个参数指定为 nil, 这样 UIKit 就会使用默认的 UIApplication 类创建对象.第四个参数是程序自定义的代理类名,这个类负责系统和代码之间的交互.它一般在 Xcode 新建项目是会自动生成.
另外 UIApplicationMain 函数加载了程序主界面的文件.虽然这个函数加载了界面文件,但是没有放到应用程序的 windows 上.
重点理解, UIApplicationMain 的做的三件事:
1.根据第三个参数创建 UIApplication 对象.
2.根据第四个参数创建应用程序的 delegate, 并设置 delegate.
3.设置主事件循环( main event loop) 包括 application 的 run loop, 同时开始处理事件.
版权声明:本文为博主原创文章,未经博主允许不得转载。