ios学习之路(一)也说说HelloWorld
来源:互联网 发布:linux nginx 全局变量 编辑:程序博客网 时间:2024/05/11 04:46
最近转到ios开发,年岁渐大记忆渐弱,blog一下,分享自己的ios学习过程,共同进步。
环境介绍:OS X10.9.4, Xcode 6.1
1. HelloWorld Xcode默认工程生成版
这个版本的图文版我觉得就没有必要再来一个了,首先它生成过程极其简单,Xcode也做得很好,其次这样的“教程”网上比比皆是。一句话总结就是新建一个Single View Application,然后一直下一步,完成之后,打开Main.storyboard,从右下角的Object Library里拖一个Label进去写上HelloWorld,然后运行程序。
图1 图2
Xcode为我们生成了(图1)的工程目录,开始看到这样的目录结构,还是有蛮多疑问的。
首先这个Main.storyboard是怎样在主程序中设定进去的,说objective-c是c超集,那以往经验告诉我在main函数中应该有UI的初始化过程和主事件循环的启动,这个storyboard虽然是UI可编辑工具,但也需要以某种方式加载。
于是查看工程生成的文件,最后在YHHello-Info.plist里找到了结果(如图2):这个文件里有一个选项是Main storyboard file base name,指定了Main,尝试修改名称Main,运行程序,果然无法显示HelloWorld,验证了猜想。 简单说一下,plist是property list文件,是xml格式的属性文件,在ios开发中很常用到,而这里的这个app-Info.plist可以看成是程序的manifest,配置了应用程序的基本信息(这里是笼统的说法,以后也许会详细说明)。
2. HelloWorld 乞丐版
自动的好处是免去重复性工作,但是作为开发者,我们还是要在享受自动化前,弄清楚整个程序工作流程,了解才能更好的运用嘛。所以我准备去掉Xcode给的伪装,来写一个乞丐版的HelloWorld。
a. 首先删除Main.storyboard, YHViewController.h YHViewController.m以及图2显示的那条property。此时运行程序,应该会看到一个黑色屏幕。
b. 打开YHAppDelegate.m, 修改- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // Override point for customization after application launch. _window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, 20, 100, 50)]; label.backgroundColor = [UIColor greenColor]; label.text = @"Hello World"; [_window addSubview:label]; [_window makeKeyAndVisible]; return YES;}
c. 运行程序,看到黑底绿色背景的HelloWorld。
3. 从乞丐版入手分析ios HelloWorld程序
我刚入手ios helloworld程序时候,有很多问题,比如为什么需要这个appdelegate类,UI的层次结构是怎样的,HelloWorld是具体怎样显示在手机上的,主事件循环是在那里开启的等等,下面试试找出头绪。
首先看main函数,其中重要的一行代码
return UIApplicationMain(argc, argv, nil, NSStringFromClass([YHAppDelegate class]));
查看一下UIApplicationMain方法的注释,函数声明如下:
int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);这个函数做了如下的事情:
a. 使用principalClassName参数来初始化UIApplication, 一般来说参数principalClassName是UIApplication的子类,如果为nil,那么初始化UIApplication类。
b. 使用delegateClassName参数来初始化UIApplicationDelegate, 一般来说参数是实现了UIApplicationDelegate协议的类,如果为nil,那说明你要从程序的主nib文件中加载delegate。
c. 给UIApplication设置delegate类。
d. 设置主事件循环,并且开始处理事件
e. 如果应用程序的info.plist中有指定main storyboard或者main nib文件,那会加载这些文件。
这里借用一下网络上童鞋的图片来说明这个流程(来自http://my.oschina.net/ifengzi/blog/93744)
那看到这里,有一些问题是需要交代一下的:(上次保存成草稿,时间太长,忘了当时要交代什么了)
UIApplication https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/cl/UIApplication
4. HelloWorld Storyboard 转Xib版
看到公司工程代码中都是用Xib来展示UI,而不是我在学习时候用得storyboard, 于是考虑同样用配置文件能不能加载Xib呢?
ok, 这篇就到这里。
- ios学习之路(一)也说说HelloWorld
- SpringMVC学习之helloworld(一)
- SpringMVC学习(一)之HelloWorld
- JAVA学习笔记之(一)HelloWorld
- 也说说学习
- 学习SpringMVC(一)之helloworld
- Android之Box2D学习(一)——HelloWorld
- cocos2d-x学习之(一)HelloWorld简介
- Jetty学习(一)嵌入应用之Helloworld
- Spring4.3学习记录之HelloWorld(一)
- JAXWS学习(一)- HelloWorld
- swift学习(一)HelloWorld
- SpringMVC学习(一)-HelloWorld
- MyBatis学习(一)-HelloWorld
- iOS 官方开发教程 HelloWorld (一)
- ios学习之旅---指针也不难
- UI设计学习之路(一)—酒香也怕巷子深
- 说说本人学习DirectX之路
- java的一些小知识
- 标准C++的4个类型转换符使用场景
- android 获取网速
- mac下安装memcached
- Android系统自带样式(@android:style/)
- ios学习之路(一)也说说HelloWorld
- BASH学习手册
- IShellLink获取快捷方式的真正地址(创建WIN32后台程序)
- UIImagePickerController详解
- org.apache.poi包简单解析Excel文件
- shell脚本使用iptables防端口扫描的一段代码
- 匈牙利算法
- 2014-07-16开发问题
- Java优化编程(第二版)