(一)窗口和视图的介绍我们在singleView工程里面.
首先我们介绍下这个工程下初始话之后的一些文件的用途
首先是项目,我们可以在项目这边可以设置一些(模拟机)设备的设置,设置一般包括库的导入.....等
framworks 这个文件主要来放置导入的库;
products 放的是运行的可执行程序;
supportting files 放置的是一些配置文件和main.m等文件
windowAndView-prefix.pch 这个文件是一个与载入文件我们可以在里面做一些事;
比如:
eum 枚举的初始化设定、条件选择编译等
下边是三张系统调用的图片
windowAndView-info.plist 可以添加一些info property list
比如icon file 应用程序的名字等
最上面的文件夹里放的是主要的文件,我们的编写的类和代码都会出现在这边的
如果我们要导入一些素材文件我们可以在这个文件夹下面创建一个Resourse来放素材
(二)接下来我们看下已经提供给我们的这些文件
appDelegate这个文件是程序的主要的代理类
在main函数里设置了代理,就是appdelegate
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]))
参考:
AppDelegate,其中NSObject表示它的“类”符合UIApplicationDelegate协议,接着UIApplicationDelegate,此方法为应用程序提供了关于触发的关键事件信息,例如什么时候程序运行完成,什么时候内存不足,什么时候重要变化发生
看下appDelegate.m中是些函数
1、- (void)applicationWillResignActive:(UIApplication *)application
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
2、- (void)applicationDidBecomeActive:(UIApplication *)application
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
3、- (void)applicationDidEnterBackground:(UIApplication *)application
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
4、- (void)applicationWillEnterForeground:(UIApplication *)application
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
5、- (void)applicationWillTerminate:(UIApplication *)application
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
7、- (void)applicationSignificantTimeChange:(UIApplication*)application
说明:当系统时间发生改变时执行
8、- (void)applicationDidFinishLaunching:(UIApplication*)application
说明:当程序载入后执行
9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
说明:当StatusBar框将要变化时执行
10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
说明:当StatusBar框方向将要变化时执行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
说明:当通过url执行
12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
说明:当StatusBar框方向变化完成后执行
13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
说明:当StatusBar框变化完成后执行
viewController这是一个uiviewController类,视图控制类。
这是工程提供的一个uiviewController,所以这个工程在初始化的时候就有了一个视图,
所以在appdelegate的didFinishLaunching的函数中有对self.window.rootViewController设置成这个;
在这个程序的末尾加上self.window makeKeyAndvisible;就可以看到视图
mvc模式
我们之后的程序都是在通过mvc模式主要的代码在model中,model中主要做的是数据的处理,view中主要设置的是视图,control主要作用是接受view的事件和数据,调用model来处理,并反馈给view,这就是mvc模式;
注意:我们以后的程序中必须要降低m-c之间的耦合度,这样才能充分的体现mvc的好处
在viewcontroller.m中我们继承UIviewcontroller的方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
接着会调用loadView方法来生成UIViewController.view
- (void)loadView
然后调用 viewDidLoad方法
- (void)viewDidLoad
如果loadView不能生成UIViewController.view系统将会反复调用loadView及viewDidLoad方法, 并且最终调用[super loadView] 方法返回UIViewController.view
然后依次调用如下2个方法, 这2个方法也十分重要, 在UINavigationController的POP操作后有时将要显示的UIViewController中的View并没有释放(也有可能释放掉) , UIViewController将不会调用上面的三个方法(initWithNibName,loadView,viewDidLoad) 而会调用下面这2个方法
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
在iOS5.0中还添加了2个函数:
- (void)viewWillLayoutSubviews ;
- (void)viewDidLayoutSubviews;
卸载过程
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewWillUnload;//iOS5.0添加
- (void)viewDidUnload;
- (void)dealloc;
PS: 当程序收到内存不足的警告后, 程序内存中的所有的UIViewController都将会收到didReceiveMemoryWarning调用消息. 目的是将当前不显示的UIViewController中的view释放掉(不会调用UIViewController的dealloc方法), 所以当该UIViewController再次显示的时候又要生成一次, 此时它会调用loadView-> viewDidLoad ->viewWillAppear等, 这时最容易造成内存泄漏!
- (void)didReceiveMemoryWarning;
- (void)viewWillUnload;//iOS5.0添加
暂且到这边....