ios应用程序的两种启动方式

记得几个月前刚接触ios时,因为要急着完成任务,树立运用的办法彻底依照书本,而书本讲的是xcode3,而装的xcode的版别是4。所以,书上的一些东东和xcode的版别对不上,十分烦恼,为了创立一个windows base 的project,都费力了心思。

过了几个月,回到来想想当初的疑问,无非是没有理解xib的原理,没有弄清楚在ios里,假如经过xib来创立目标。

关于xib创立目标,能够从发动开端。咱们来看看windows base project的做法和 single view project的做法。

一:关于 window base 的创立过程:

第1步:将创立的xib设置为发动frame。这个能够在 target>>summary>>main interface中设置。

这有点相当于将运用的发动进口设置为本xib。

第2步:这个发动xib的file owner一定是 UIApplication。但真实的大局AppDelegate是哪个呢?

那就需求你在xib中新建一个Object,然后把类名设置为您的真实的发动署理类:xxxx_AppDelegate

留意:这儿需求将发动类绑定到 file owner的delegate。(和UI元素的绑定办法相同)。

咱们再看看main函数:

int retVal = UIApplicationMain(argc, argv,nil, nil);

这儿没有指定发动的署理类。我猜测最终一个参数不设置的话,就会从发动xib中的UIApplication.delegate来指定。

第3步:继然是window base,那你当然需求在发动xib中创立一个window。

创立的window与代码怎么对应呢?一般咱们是在 xxxx_AppDelegate中创立一个UIWindow。

然后在xib中将window与署理中的实例衔接上,然后代码中就直接用了,和运用一个控件相同。

这么,程序一发动,就创立了一个UIWindow。不需求你写UIWindow的创立代码。

第4步:作为一个UI程序,应当会有界面逻辑,而界面需求包含在UIViewController中,

所以,你能够在发动xib中创立UIViewController,绘制你的界面。或许直接相关别一个nib文件。

当然,你要运用它,依然需求在xxxx_AppDelegate中声明UIViewController中的目标viewController,然后在xib中树立衔接。

留意:这种办法下,UIViewController是主动创立的,不需求你写创立的代码。

最终一步:经过上面的动作。在发动署理的发动办法didFinishLaunchingWithOptions中增加以下代码就搞定了。

[window addSubview:viewController.view];

[window makeKeyAndVisible];

依照上面这种办法,咱们的发动界面没有运用 alloc来创立任何ui目标,所有ui目标都是经过xib加载时主动生成的。

需求留意的是,这种办法,需求将xib设置为 main interface。假如您的程序是iphone和ipad习惯的,那能够设置两个不一样的发动xib.

假如在xcode4中要创立 window base project,差不多就上面的套路。靠xib来生成window和viewController.

注:我也见到过没有设置main interface的程序,并且在main中也没有设置AppDelegate类。我猜测,默以为运用MainWindow.xib做为

发动Interface。好象书中的hello_world即是这么的。

二:再看看single view project的创立办法。

第1步:当然,咱们不能设置 main interface。咱们需求看看main函数。在其间设定发动署理类。

UIApplicationMain(argc, argv,nil, NSStringFromClass([SingViewTest_AppDelegateclass]));

在这儿,第4个参数咱们指定了发动的AppDelegate,而不是象上面那样,经过xib来指定发动署理类。

第2步:在发动办法中,自行创立window

self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]] autorelease];

上面的代码创立一个全屏的窗体,看看,是咱们自已alloc的。

第3步:经过程序来创立 SingelView的viewControoler.

self.viewController = [[[SingViewTest_ViewControlleralloc] initWithNibName:@"SingViewTest_ViewController"bundle:nil]autorelease];

假如您的viewController想经过xib来加载(一般的办法),那就采取上面的办法。

假如您不想运用 UI 设计器,你也能够

MyViewController *vc = [[ MyViewControlleralloc] init];

当然,这种状况你需求在viewdidLoad中动态生成您的ui元素。

最终一步:将viewcontroller的ui显示出来。

self.window.rootViewController =self.viewController;

[self.windowmakeKeyAndVisible];

经过上面两个工程的创立,能够看出,ios供给两个发动进口的办法。

办法一:指定xib做为发动interface,这种办法下,需求自已指定发动AppDelegate。

能够经过创立 object,然后改类名,再绑定的办法。

这种办法下,能够以此为起点,将真实的发动window,发动ViewController在此处创立和衔接。

关于简略的运用,咱们还能够在这个发动的xib里,将发动的ui都画好。

办法二:在main中指定发动AppDelegate。

这个需求修改 main函数中 UIApplicationMain办法的最终一个参数。

这种办法下,发动的windows,viewController需求自已通过alloc来生成,后边的做法和办法一就没啥区别了。

引荐网站 http://www.keymob.com/

时间: 2024-08-06 10:54:33

ios应用程序的两种启动方式的相关文章

ios应用程序的两种启动方法

?1.概述 AFNetworking简称AFN,是iOS开发中干流第三方结构之一.苹果的一套结构NSContention发送央求与接纳央求的办法十分繁琐.操作起来很不便利.不只需做差异各种央求设置各种不相同的参数,而且还要经常在多线程里操作,一同还要对央求与回来的数据做各种序列化的操作,一同还要考虑央求数据的安全等成堆疑问.而AFNetworking帮我们简化了网络操作. 2.早前的几个网络结构 1.ASI结构: HTTP终结者.很牛, 但是有BUG, 现已间断更新. 2.MKNetworkKi

ARM的两种启动方式 (NAND FLASH. NOR FLASH)

为什么会有两种启动方式? 这就是有两种FLASH 的不同特点决定的. NAND FLASH 容量大,存储的单位比特数据的成本要低很多,但是要按照特定的时序对NAND  FLASH  进行读写,因此CPU  无法对NAND  FLASH 的数据进行直接寻址,CPU 对NAND  FLASH 中数据的读写是通过专门的  nand  flash控制器进行的,因此 NAND  FLASH 更适合于存储数据. NOR FLASH 容量小,速度快,对NOR FLASH 进行读写时,输入地址,然后给出读写信号

Android Service的两种启动方式

参考链接 1. 概念 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC, 也不需要AIDL.相应bindService会方便很多.主进程被Kill后,服务便会终止. 2.远程服务为独立的进程,对应进程名格式为所在包名加上你指定的android:process字符

Android -- service两种启动方式startService与bindService

继上一篇文章,Android – Service的使用,我们来继续看看Service的两种启动方式 第一种startService . 运行代码,得知以下几点结论: 我们了解它的启动周期为onCreate->onStartCommand,如图 当退出应用后,后台的Service进程仍然存在,未被销毁 当点击多次startService时,如图我点击了3次,你会发现onCreate方法只创建了一次. stopService,如图 第二种bindService 运行代码得知以下结论: 点击bindS

Service的两种启动方式

今天又写Service,提示覆写onBind(),想起Android好像是有个叫做Binder的IPC机制. Service里面有一个onBind(),一个onStartCommand(),两者都能启动Service, 查了一下,有人说区别是能否持续调用,onStartCommand可以,onBind不行.SEE:HERE>> 有人说onStartCommand()可以用startService()来启动,而onBind()要用binder对象. 粗略了解下吧. Service的两种启动方式

Android四大组件之服务的两种启动方式详解

Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC).例如:服务可以处理网络事务.播放音乐,执行文件 I/O 或与内容提供程序交互,而这一切均可在后台进行. 进程的优先级 了解进程的优先级可以帮助你理解服务~ 1. Foreground process(前台进程) 一句话总结:当前跟用户有交互

IOS单例的两种实现方式

单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种). 根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的dispatch_once函数. [email protected]synchronized 实现 static InstanceClass *instance; + (InstanceClass *)defaultInstance{ @synchronized (self){ if (instance == ni

Service 两种启动方式

Service的生命周期Service的生命周期方法比Activity少一些,只有onCreate,onStart,onDestroy 我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的. 1通过startService Service会经历onCreate->onStart stopService的时候直接onDestroy 如果是调用者(TestServiceHolder)自己直接退出而没有调用stopService的 话,Service会一直在后台运行. 下

Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags(); 一.Android Activity 四种启动模式 lunchMode 在Manifest 配置文件中的属性如下: (1) android:launchMode="standard" (2)android:launchMode="singleTop" (3)android:launchMode="singleTask" (4)andro