您的位置:首页 > 编程语言

Hello,iPhone ! Hello world ! --iPhone 开发入门工程代码全解析

2009-07-23 11:07 113 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/iteye_9603/article/details/81752043 作者:Whhema
原贴地址:http://www.devdiv.net/home/space-6680-do-blog-id-262.html


今天偶来说说iphone的helloworld。

首先从官网上下载源码包,解压后结构如下:
.
│ Background.png
│ Default.png
│ HelloWorld.xib
│ HelloWorld_Prefix.pch
│ Icon.png
│ Info.plist
│ main.m
│ MainWindow.xib
│ ReadMe.txt

├─Classes
│ HelloWorldAppDelegate.h
│ HelloWorldAppDelegate.m
│ MyViewController.h
│ MyViewController.m

└─HelloWorld.xcodeproj
project.pbxproj

猛一看,真是非常的复杂,慢慢来,下面我来解释一下。
首先看最外层,包含了2个目录和一堆闲散文件。
Classes目录顾名思义,存放了项目的各个类,是需要开发者进行改动的。这里相当于symbian工程的inc和src目录。
HelloWorld.xcodeproj:看上去是个目录,其实在mac上,这个是XCode的项目文件,存放了在XCode中,项目的组成和build等信息。如果在XCode中打开这个工程,还会再生成2个文件,一般来说我们不用理会。
闲散文件:
1,几个png:用于程序的背景和图标等。
2,pch:预编译头文件,win32里经常会碰到,这里也有,包含了常用的头文件。
3,plist:包含了项目自身的特性,比如说项目名称啊,默认加载的nib file啊等等等等。相当于symbian中的mmp文件。
4,两个xib:这就是传说中的资源文件。和现在流行的GUI程序一样,iphone中也提供资源文件,用于简化编码过程,提高开发效率。
5,main.m:为什么这里单放了一个源文件呢,其实这个main.m是完全不用动的,大家马上就会看到这里面到底有什么。

---
开始进入source:
首先就是iphone程序的入口,在main.m中。
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
这是大家都熟悉的main函数,里面马上创建一个NSAutoreleasePool对象,用于iphone高级架构的内存管理,然后全权委托UIApplicationMain这个函数来处理整个过程。
UIApplicationMain中封装了具体的做法,在适当的时候,会调用适当的方法,形成一个事件驱动的过程。
和UIApplicationMain最为紧密的,就是UIApplicationDelegate,UIApplicationDelegate提供了对app生命周期关键时刻的处理。
在这里,极为简单地,在iphone OS准备好运行这个app后,会发送消息给UIApplicationDelegate的applicationDidFinishLaunching方法,表示程序开始run,我们的具体实现当然是初始化一切啦。

上代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

// Set up the view controller
MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@"HelloWorld" bundle:[NSBundle mainBundle]];
self.myViewController = aViewController;
[aViewController release];

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];

// Add the view controller's view as a subview of the window
UIView *controllersView = [myViewController view];
[window addSubview:controllersView];
[window makeKeyAndVisible];
}

一开始,我们建立起view controller,这里是读取一个名叫@"HelloWorld",并且处于mainBundle中的nib file。
之后设置一下状态栏(可有可无的),接下来,给window加一个UIView,这个UIView在controller中可以取到。最后让这个window "makeKeyAndVisible",显示窗口,并接受用户的输入。

最关键的已经说完,接下来一起看看view controller的细节,由于是helloworld,我就不把功能当成重点了,大家有可以去查查sdk。
先看看controller的声明的一部分,注意这只是一部分:

@interface MyViewController : UIViewController <UITextFieldDelegate> {

IBOutlet UITextField *textField;
IBOutlet UILabel *label;
NSString *string;
}

这里我们的controller继承自iphone规定的controller的基类——UIViewController ,并实现了UITextFieldDelegate这个Delegate(相当于c++的纯虚函数;java中的接口)。UITextFieldDelegate只是用来实现输入框的增强型功能的,可有可无。
下面有3个成员变量,textField是系统输入框控件,label是系统label控件,string是文字。注意前两个成员的声明之前,出现了IBOutlet,这是用来通知interface builder的,用于把代码中的实例和nib file中的定义关联起来。

在MyViewController.m中,override了几个来自于基类的方法,有viewDidLoad和touchesBegan。
viewDidLoad来自于UIViewController,是一个回调。 touchesBegan来自于UIResponder,当触摸开始时(手指头向下按的时刻),由系统回调回来。

ok,代码部分已经全部说完,因为是helloworld,回调并不太多也并不太全,稍稍有些不严谨,不过这不影响我们学习。

---
其他的一些重要文件:
1,HelloWorld.xib:可以直接打开,这是个xml。数据量虽然不小,但我们根本不需要直接改。interface builder就是用来修改这个文件的。文件内记录了位置、引用、字符串等等信息。
2,Info.plist:这也是个xml,记录了app的重要特性。这里基本就要自己手动改了,在plist节点中,仅有一个dict子节点。dict节点中定义了若干个key,随便说几个:CFBundleDevelopmentRegion(开发者所在地区),CFBundleDisplayName,CFBundleExecutable,NSMainNibFile等。
但说一下NSMainNibFile,它定义了入口的nib file,这个工程定义的是MainWindow.xib,提供了window。

---
最后的话:
如果大家看到这里还没晕,那么说明你们是牛,这点东西为难不了你们~~
如果大家觉得很多东西难以理解,那么,找个机会,在iphone的模拟器上跑一圈吧~~

祝大家成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: