六 view controller 笔记


1,UIViewController用于管理view树,处理事件,以及将view树加到window中;

       类似于android的Activity


2,viewController有一个关键的view属性,它代表view树的根,可以把它加入到UIWindow的subviews中;


3,只有当需要显示viewController时候,才初始化view对象,这称为懒加载; 可以通过loadView或者NIB文件的方式创建viewController的view树


4,当一个viewController创建的时候,它的view属性为nil,只有当外部对象访问viewController对象的view属性时候,才会调用loadView方法


5,指定使用NIB文件初始化一个viewcontroller

      - (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle;

     这个方法是viewcontroller的默认构造函数,不管是否使用nib都会被调用!

      

      默认的loadview方法,已经实现了通过NIB初始化一个view树;


      

#import "BNRReminderViewController.h"
@implementation BNRAppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch
// This line will generate a warning, ignore it for now
BNRHypnosisViewController *hvc = [[BNRHypnosisViewController alloc] init];
// This will get a pointer to an object that represents the app bundle
NSBundle *appBundle = [NSBundle mainBundle];
// Look in the appBundle for the file BNRReminderViewController.xib
BNRReminderViewController *rvc =
[[BNRReminderViewController alloc] initWithNibName:@"BNRReminderViewController"
bundle:appBundle];
self.window.rootViewController = hvc;
self.window.rootViewController = rvc;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}


6,Bundle是一个目录,用于存放资源和可执行文件


7,当创建一个XIB文件时,需要指定它的file owner,这个file owner是一个占位符;只有设置了,才能为IBOutlet和IBAction建立连接;


8,UITabBarController可以添加多个viewController,可以通过viewcontroller的tabBarItem设置tabBar上显示的名字和图标!

      


9,通知有local notification和push notifications; 

      push notifications有一个backend server?


10,创建一个本地通知

        

- (IBAction)addReminder:(id)sender
{
NSDate *date = self.datePicker.date;
NSLog(@"Setting a reminder for %@", date);
UILocalNotification *note = [[UILocalNotification alloc] init];
note.alertBody = @"Hypnotize me!";
note.fireDate = date;
[[UIApplication sharedApplication] scheduleLocalNotification:note];
}

11,懒加载

        只有在需要显示viewController的时候,才访问它的view属性(getView方法?); 

        接着会调用viewController的Loadview方法; 

        一般情况下,不要在构造函数中访问view属性,这样即使调用了构造函数,创建了一个viewController,也不会创建对应的view,起到懒加载的目的。


12,生命周期方法

        application:didFinishLaunchingWithOptions:  程序第一次启动的时候调用

        viewDidLoad  在第一次NIB加载成功的时候调用

        viewWillAppear  在每次显示前调用

       viewWillDisappear: and viewDidDisappear: 消失前调用,也是每次都会调用; 类似于android的onPause  

        在构造函数中,无法访问连接的IBOutLets属性,因为这时候NIB还没有加载成功


13,失真

        在retina屏中,因为一个Point对应2*2,原有的按照1*1的图片就会出现失真,修正的方法是使用相对于大小的图片;


14, kvc

      ios 使用kvc初始化一个outlets的属性

      在nib文件加载过程中,使用kvc机制初始化;


     必须有相关的get、set方法,否则会抛出异常






        





你可能感兴趣的:(六 view controller 笔记)