ios UIViewController的生命周期

本文详细解析了iOS应用启动过程中的关键步骤,包括视图控制器的初始化、视图加载及显示等过程,并解释了各阶段的方法调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    MainViewController *viewController = [[MainViewController alloc] init];
    self.window.rootViewController = viewController;
    [viewController release];
    
    return YES;
}


MainViewController 是一个视图控制器,他的父类是UIViewController ;

1. [[MainViewController alloc] init]; 创建一块内存,然后init初始化。


init就是调用MainViewController类里面的

- (id)init
{
    self = [super init];
    if (self){
        
    }
    return self;
}

执行到self = [super init]; 进入方法,将执行这个函数

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
这个方法执行完毕,后回到- (id)init这个方法继续执行if(self)语句,然后初始化完毕。

2.self.window.rootViewController = viewController;将视图控制器赋值给window的rootViewController;

=右边,将调用

- (void)loadView
{ 
    UIView *view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    view.backgroundColor = [UIColor blueColor];
    self.view = view;
}

因为viewController的view为nil,所以调用这个方法,里面的内容是自己添加的,如果自己不添加,应当写[super loadView],或者干脆就不重写这个方法;


然后就调用 编译器自动生成的

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
}

然后就是

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}


3.[viewController release]; 引用计数-1;

视图控制器装载完毕。


简单点就是

1、 alloc                                   创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear              视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear               视图已在屏幕上渲染完成

当引用计数为0的时候,代码顺序就是

1、viewWillDisappear            视图将被从屏幕上移除之前执行
2、viewDidDisappear             视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc                                 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值