一,本文讲解建立一个空项目,怎么一步一步的创建程序,总体的感觉一下程序流程 1,首先建立一个项目,如下:single view project,我们首先删除CHAppDelegate文件和Main.storyboard和CHViewController
要点:
//启动,创建,实例--应用程序对象,并且指定应用程序的代理对象
//程序启动到关闭称为应用程序的生命周期
//实例对象从分配内存到释放内存,称为实例对象的生命周期
//程序启动后,在程序内任何时间,任何文件内获得的实例对象都是同一个实例对象,这个实例对象叫做单例
//应用程序代理对象,处理应用程序对象的状态
进入main.m文件,删除不必要的头文件,UIApplicationMain修改如下:
return UIApplicationMain(argc, argv, nil,nil);运行程序发下crash掉了,呵呵
我们首先看看UIApplicationMain在API文档中的介绍:
This function is called in the main entry point to create the application object and the application delegate and set up the event cycle.
int UIApplicationMain (//这个函数在main方法中调用来创建应用程序对象和程序代理并且建立消息循环
int argc,
char *argv[],//前两个参数是Main函数里面的两个参数,传进来
NSString *principalClassName,//UIApplication类或子类的名字,如果设置为nil,会默认成UIApplication,一般不做设置. UIApplication is assumed.
NSString *delegateClassName//程序执行就会进入这个委托中执行消息循环
);
二.创建一个类FirstApplicationDelegate来作为主程序的代理类
我们准备将FirstApplicationDelegate作为应用程序对象的代理对象,所以它就应该接受应用程序对象的代理,实现UIApplicationDelegate协议 如下:类继承于UIResponder,
@interface FirstApplicationDelegate : UIResponder<UIApplicationDelegate>//在类的后面加上<UIApplicationDelegate>就是类必须实现这个协议
@property (nonatomic,retain) UIWindow *window;//创建窗口属性
@end
然后在主函数中修改为return UIApplicationMain(argc, argv, nil,NSStringFromClass([FirstApplicationDelegate class]));并添加头文件#import "FirstApplicationDelegate.h".
NSStringFromClass([FirstApplicationDelegate class])的操作作用:NSStringFromClass是把类名转化为字符串形式,[FirstApplicationDelegate class]是把这个类的类名返回.
三.创建ViewController类,继承于UIViewController作为应用程序的根视图
// 视图控制器的根(视图)加载完成后...
// 根视图与窗口的根(视图控制器)不是同一个对象...
我建立如下@interface CHViewController : UIViewController
在.m中实现代码如下:主要利用建立随机换色程序来介绍
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// 声明按钮的实例对象// 实例化按钮的实例对象
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
// 设置按钮实例对象的大小和位置...
button.frame = CGRectMake(100, 100, 120.f, 120.f);
// 设置按钮实例对象的颜色...
button.backgroundColor = [UIColor orangeColor];
// 设置按钮实例对象的标题...
[button setTitle:@"点我啊" forState:UIControlStateNormal];
// 设置按钮实例对象在接受用户点击时,处理的方法...
// 这个方法,发送给谁呢?
[button addTarget:self action:@selector(didClickButton:) forControlEvents:UIControlEventTouchUpInside];//按钮事件处理函数
// 将按钮显示出来...
[self.view addSubview:button];//把按钮添加到根视图,根视图就是程序运行时你看到的第一个界面(暂时这么理解)
}
// 按钮触发的方法
- (void)didClickButton:(UIButton *)button
{
// // 创建随机颜色
// CGFloat r = arc4random()%1000/1000.0f;
// CGFloat g = arc4random()%1000/1000.0f;
// CGFloat b = arc4random()%1000/1000.0f;
// UIColor *randomColor = [UIColor colorWithRed:r green:g blue:b alpha:1.0f];
// 将随机颜色赋值给按钮的背景颜色
button.backgroundColor = [UIColor randomColor];
NSLog(@"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
// UIApplicationDelegate是个协议,定义了一堆监测程序执行方法,这些方法都有自己的触发事件
// 处理程序加载完成
// 程序启动,活跃/非活跃状态,前/后台切换,推送通知,内存警告等
为FirstApplicationDelegate添加内容如下:
@implementation FirstApplicationDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0)
{
//实例化应用程序窗口
//每个应用程序有且只有一个关键窗口
UIWindow *window=[[UIWindow alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
self.window=window;//将局部变量赋值给应用程序代理对象的属性
//设置背景色
window.backgroundColor=[UIColor whiteColor];
//设置窗口大小
//window.frame=CGRectMake(0, 0, 320, 480);
RootViewController * rootVC=[[RootViewController alloc]init];//实例化窗口内容
window.rootViewController=rootVC;
//将window对象设置成为应用程序对象的关键窗口
[window makeKeyAndVisible];
[window release];
return YES;
}
@end