IOS菜鸟日志-如何启动你的APP

iPhone技术架构

1、Cocoa Touch层(主要是UIKit框架)

管理界面相关的用户交互事件和行为,例如:触摸,滑动,摇摆,并提供“联系人“、”图片“、”重力感应“、”相机“等基础程序框架。

2、Media层

提供声音,图像以及高级图形、动画技术的高层程序框架。

3、OS层

提供系统基础服务,如内核,驱动,以及内存,线程,文件系统,网络,进程通信等操作系统接口。

iPhone程序启动过程

现在我们可以打开Xcode,Create a new Xcode project -> IOSApplication -> Empty Application,然后点击Next,在Product Name中输入Test后点击Next,最后存放文件目录。

呈现在我们面前的是如图所示的文件树图。在main.m中我们可以看到如下代码:

这是IOS典型的加入ARC的启动代码,这里告诉我们3件事情,创建一个autoreleasepool的自动释放内存池,调用UIApplicationMain()函数,该函数返回一个int值,最后释放内存池。这里的核心就是UIApplicationMain(),它接受4个参数。前两个参数是来自于main函数的两个参数,后两个string类型参数分别代表principal class和delegate class,即主要类和代理类。如果principal class为nil,则默认为UIApplication。只要后两个参数任意一个不为nil,UIApplicationMain()函数就会gen根据参数创建相应的功能类。由此不难知道如果你自定义了一个UIApplication的子类(但不建议),你需要讲它作为第三个参数传进来。

UIApplication被实例化后会调用delegate接口的application:didFinishLaunchingWithOptions:。该函数是属于UIApplicationDelege的回调函数,所以程序需要一个主类实现这个接口。幸运的是Xcode5已经自动帮我们创建好了这个类AppDelegate。在AppDelege.h我们可以看到如下代码:

#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

这里很明显就看出我们的AppDelegate是继承UIResponder并且实现UIApplicationDelegate接口,同时申明了一个UIWindow的指针_window,其中的参数分别为strong和nonatomic,这两参数现在只简单说下,strong是为ARC技术防止死锁而设定的,nonatomic是非原子性,是和线程相关,我们现在不必关心这两个参数,只是稍作了解。

接下来在.m文件中我们可以看到application:didFinishLaunchingWithOptions:这个函数的具体内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

里面有关与UIWindows的具体操作,我们以后会提到。这里同样稍作了解。第一句是申请内存并且初始化边框为主屏幕大小,第二句设定窗体背景颜色为白色,第三句话让window可见并显示在屏幕上。

于是现在我们讲程序运行在iPhone虚拟机上就可以看到下面的图片:

没错,就是一块白色的窗体,并且什么都没有。折腾了这么半天,你才发现你什么也没做。但不要沮丧,对于新手来说理解IOS程序是如何运行的机制是需要的,当我们知道如何启动一个IOS程序,才能往里面添加你想要的内容。前提是你需要知道它是如何启动的,幸运的是这篇文章就是告诉你IOS程序启动的原理。j接下来欢迎进入IOS开发的世界!

IOS菜鸟日志-如何启动你的APP

时间: 2024-08-29 15:52:01

IOS菜鸟日志-如何启动你的APP的相关文章

ios+appium 自动化测试,启动以及调用app

#coding:utf-8 from appium import webdriver import time cap={ "platformName":"iOS", "platformVersion":"11.3", "deviceName":"iPad Air", "automationName":"XCUITest", "app&qu

ios 一个app启动另一个app

问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序. 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes).注册自己的URL Demo源代码链接:http://pan.baidu.com/s/1bo327sb 如何从一个app中,启动另一个app???本人ios菜鸟(工作需要,刚开始自学ios,现学现卖,哈哈)参考网上若干文章,实现了这个功能.目前,将demo分享出来. 1.注册自己的URL 新建一个工程MyAppOne,在inf

iOS launch image(启动画面)和app icon

Launch image: http://www.cnblogs.com/ADaii/archive/2013/01/14/2860444.html App icon: http://www.weste.net/2012/2-3/79602.html http://my.oschina.net/u/661032/blog/80663 iOS launch image(启动画面)和app icon

IOS崩溃日志解析(crash log)

IOS的应用程序少不了crash,互联网统计分析工具友盟有一项目错误分析的功能,专门用于应用程序崩溃日志统计,最近研究友盟上统计到的崩溃日志,在此对崩溃日志做一个简单的总结. IOS崩溃日志分类: 一.低内存崩溃:IOS设备检测到低内存时,虚拟内存系统发出通知请求应用释放内存.这些通知发送到所有正在运行的应用和进程,试图收回一些内存.如果内存使用依然居高不下,系统将会终止后台线程以缓解内存压力.如果可用内存足够,应用将能够继续运行而不会产生崩溃报告.否则,应用将被iOS终止,并产生低内存崩溃报告

iOS 打印日志的保存 (一)

当我们真机调试app的时候,作为开发人员的我们可以很方便的通过Xcode的debug area查看相关的打印信息.而测试人员在对app进行测试的时候,一旦出现了crash,这时我们就需要把相关的打印信息保存下来, 以便后面进行查看追踪crash原因.在这里我们可以将打印信息写入沙盒系统中.不多说了,直接上代码. 1 - (void)redirectNSlogToDocumentFolder 2 { 3 if (isatty(STDOUT_FILENO)) 4 { 5 NSLog(@"真机调试,无

iOS中的应用启动原理

iOS中的应用启动原理 来源: http://m.warting.com/program/201601/127355.html 一.UIApplication  1. 简单介绍 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示. (3)通过[UIApplicationsharedApplicat

ios 崩溃日志揭秘

http://www.raywenderlich.com/zh-hans/30818/ios%E5%BA%94%E7%94%A8%E5%B4%A9%E6%BA%83%E6%97%A5%E5%BF%97%E6%8F%AD%E7%A7%98 0x8badf00d: 读做 "ate bad food"! (把数字换成字母,是不是很像 :p)该编码表示应用是因为发生watchdog超时而被iOS终止的.  通常是应用花费太多时间而无法启动.终止或响应用系统事件. 0xbad22222: 该编码

一只在读iOS菜鸟十个月来从零基础到拿到实习Offer的总结

技术背景 从2014年8月中旬开始接触iOS开发至今,过了整整十个月.就当做第一年的个人总结吧.最初接触iOS开发是在大一结束的暑假.当时的水平仅限于了解简单的C语言.因为学过Java,所以对于面向对象的思想也有接触. 入门阶段(2014.8-2014.12) 开始接触iOS开发之后,显然要从OC学起.陪伴我入门的有两本书.附赠京东购买地址. 1.<iOS7开发快速入门> 2.<iOS开发指南--从零基础到App Store上架> 第一本书已经不慎遗失,个人感觉更偏重基础,第二本书

常用获取Android崩溃日志和IOS崩溃日志的几种方法

一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:Android崩溃日志 一.通过adb logcat获取 # 清除日志,新手上路时,日志内容很多,对于能毕现的日志,可以先清除后重新获取 adb logcat -c # 然后再次运行崩溃操作,再抓取日志 # 存储日志到当前目录下的 carsh.log 中 adb logcat -d *:W > crash