ios开发心得之一

   如果学习IOS开发这对于一个初学者来说,是一件非常挠头的事情。其实学习IOS开发无外乎三大门槛。

一、        硬件门槛(学习IOS是要花钱的,一个MAC一个手机就得二万大洋了,还不算开发者帐号)

二、        环境门槛(搞喜欢了windows你花mac会很痛苦的,要什么没有什么,不过搞一搞就好了)

三、        技术门槛(语言objective-C一开始你会感觉真他妈的恶心,不过越用越爽,有点臭豆腐的感觉了。还有就是xcode的使用,IOS开发环境下的MVC的理解这些东西每一处都是档在初学者头上的利剑)

许多人学着学着就放弃了,从今天开始,哥们我有空就写点文档与大家分享一下,希望对IOS开发的初学者有点帮助。

如何理解IOS中UIViewControl/UIView/UIApplicationDelegate之间的关系。

一个UIViewControl可以对应N个UIView

N个UIViewControl对应1个UIApplicationDelegate

呵呵,不知道各位是不是看懂了,以往大家都喜欢用xcode自动生成的模版来实现程序,这样非常方便与快捷但是麻烦就在于初学者会一头雾水,对于原理的理解不是很好。我在这里给出一个完整的源程序,同时我们也来分析一下它。

1、         首先创建一个UIViewController

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController
@end

@implementation HelloWorldViewController
//这个解释一下,用loadView这个方法的原因是因为
//我们没有使用xib文件来画界面,所以用loadView方法
- (void)loadView
{
    //创建一个UIView,这个UIView你如何去理解它哪,你可以把它理解为一个画布
    //并且初始化它的大小为整个屏幕那么大
    UIView *contentView = 
    [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    //指定它的背景颜色
	contentView.backgroundColor = [UIColor lightGrayColor];
	//有了画布我们需要在上面搞点组件,一般情况下我们是用InterfaceBuilder画的
    //在这里我们用手工的方法来编写
    //初始化一个UILabel组件,说白了就是一个标签,CGrectMake的四个参数
    //XY坐标,宽度与高度
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
    label.text = @"Hello World";
    label.center = contentView.center;
	label.backgroundColor = [UIColor clearColor];
	label.textAlignment = UITextAlignmentCenter;

    [contentView addSubview:label];
    [label release];
    //现在画布上有东西了,我们需要把它放到画板上,其实这个UIViewController就是一个画板
    //想一想一个画板上,是不是可以一层一层的放许多的画布哪,一个道理哪。
	self.view = contentView;
    [contentView release];
	
	// For testing the console pane
	NSLog(@"Hello World!");
}
@end

  

2、         创建一个UIApplicationDelegate

 1 @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
2 {
3 }
4 @end
5
6 @implementation HelloWorldAppDelegate
7 //这个方法,是在程序启动后,所执行的
8 - (void)applicationDidFinishLaunching:(UIApplication *)application {
9 // UIWindow可以理解为一个画板架,我们把UIController放到UIWindows中
10 UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
11 HelloWorldViewController *hwvc = [[HelloWorldViewController alloc] init];
12 [window addSubview:hwvc.view];
13 [window makeKeyAndVisible];
14 }
15 @end



3、         在main启动这个程序

1 int main(int argc, char *argv[])
2 {
3 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
4 int retVal = UIApplicationMain(argc, argv, nil, @"HelloWorldAppDelegate");
5 [pool release];
6 return retVal;
7 }

完整程序:

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController
@end

@implementation HelloWorldViewController
//这个解释一下,用loadView这个方法的原因是因为
//我们没有使用xib文件来画界面,所以用loadView方法
- (void)loadView
{
//创建一个UIView,这个UIView你如何去理解它哪,你可以把它理解为一个画布
//并且初始化它的大小为整个屏幕那么大
UIView *contentView =
[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//指定它的背景颜色
contentView.backgroundColor = [UIColor lightGrayColor];
//有了画布我们需要在上面搞点组件,一般情况下我们是用InterfaceBuilder画的
//在这里我们用手工的方法来编写
//初始化一个UILabel组件,说白了就是一个标签,CGrectMake的四个参数
//XY坐标,宽度与高度
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
label.text = @"Hello World";
label.center = contentView.center;
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;

[contentView addSubview:label];
[label release];
//现在画布上有东西了,我们需要把它放到画板上,其实这个UIViewController就是一个画板
//想一想一个画板上,是不是可以一层一层的放许多的画布哪,一个道理哪。
self.view = contentView;
[contentView release];

// For testing the console pane
NSLog(@"Hello World!");
}
@end

@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
{
}
@end

@implementation HelloWorldAppDelegate
//这个方法,是在程序启动后,所执行的
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// UIWindow可以理解为一个画板架,我们把UIController放到UIWindows中
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
HelloWorldViewController *hwvc = [[HelloWorldViewController alloc] init];
[window addSubview:hwvc.view];
[window makeKeyAndVisible];
}
@end

int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"HelloWorldAppDelegate");
[pool release];
return retVal;
}




posted @ 2011-10-25 17:00  楚广明  阅读(3584)  评论(0编辑  收藏  举报