IOS UIView的生命周期的实例详解

 更新时间:2017年09月12日 11:23:36   作者:番薯大佬  
这篇文章主要介绍了IOS UIView的生命周期的实例详解的相关资料,希望通过本文大家能掌握理解这部分内容,需要的朋友可以参考下

IOS UIView的生命周期的实例详解

任何对象的者有一个生命周期,即都存在一个实例化到销毁的过程。

UIView对象也不例外,那么UIView从init/new开始后,直到dealloc结束的过程中都经历了哪些过程呢?

首先自定义继承自UIView的对象LifeView

#import <UIKit/UIKit.h> 
 
@interface LifeView : UIView 
 
@end 
#import "LifeView.h" 
 
@interface LifeView () 
{ 
  NSInteger count; 
} 
 
@end 
 
@implementation LifeView 
 
- (instancetype)initWithFrame:(CGRect)frame 
{ 
  self = [super initWithFrame:frame]; 
  if (self) 
  { 
    NSLog(@"<-- 1 %s , count = %@-->", __func__, @(count++)); 
  } 
  return self; 
} 
 
 
- (void)willMoveToSuperview:(nullable UIView *)newSuperview 
{ 
  NSLog(@"<-- 2 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)didMoveToSuperview 
{ 
  NSLog(@"<-- 3 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)willMoveToWindow:(nullable UIWindow *)newWindow 
{ 
  NSLog(@"<-- 4/7 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)didMoveToWindow 
{ 
  NSLog(@"<-- 5/8 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)layoutSubviews 
{ 
  NSLog(@"<-- 6 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)removeFromSuperview 
{ 
  NSLog(@"<-- 9 %s , count = %@-->", __func__, @(count++)); 
} 
 
- (void)dealloc 
{ 
  NSLog(@"<-- 10 %s , count = %@-->", __func__, @(count++)); 
} 
 
@end 

其次,在B视图控制器中实例化,并添加到父视图

- (void)viewDidLoad { 
  [super viewDidLoad]; 
  // Do any additional setup after loading the view. 
   
  self.title = @"life view"; 
   
  LifeView *lifeView = [[LifeView alloc] initWithFrame:CGRectMake(10.0, 80.0, 100.0, 100.0)]; 
  [self.view addSubview:lifeView]; 
  lifeView.tag = 1000; 
  lifeView.backgroundColor = [UIColor orangeColor]; 
} 

当B视图控制器被push,或present出来时,被调用的LifeView的相关方法,如下所示:

// 实例化时 
2017-06-16 00:37:10.694 DemoViewLife[3963:121184] <-- 1 -[LifeView initWithFrame:] , count = 0--> 
2017-06-16 00:37:10.695 DemoViewLife[3963:121184] <-- 2 -[LifeView willMoveToSuperview:] , count = 1--> 
2017-06-16 00:37:10.695 DemoViewLife[3963:121184] <-- 3 -[LifeView didMoveToSuperview] , count = 2--> 
2017-06-16 00:37:10.697 DemoViewLife[3963:121184] <-- 4/7 -[LifeView willMoveToWindow:] , count = 3--> 
2017-06-16 00:37:10.697 DemoViewLife[3963:121184] <-- 5/8 -[LifeView didMoveToWindow] , count = 4--> 
2017-06-16 00:37:10.701 DemoViewLife[3963:121184] <-- 6 -[LifeView layoutSubviews] , count = 5--> 

当B视图控制器被pop,或dismiss时,被调用的LifeView的相关方法,如下所示:

// 销毁时 
2017-06-16 00:37:25.514 DemoViewLife[3963:121184] <-- 4/7 -[LifeView willMoveToWindow:] , count = 6--> 
2017-06-16 00:37:25.514 DemoViewLife[3963:121184] <-- 5/8 -[LifeView didMoveToWindow] , count = 7--> 
2017-06-16 00:37:25.515 DemoViewLife[3963:121184] <-- 9 -[LifeView removeFromSuperview] , count = 8--> 
2017-06-16 00:37:25.516 DemoViewLife[3963:121184] <-- 9 -[LifeView removeFromSuperview] , count = 9--> 
2017-06-16 00:37:25.518 DemoViewLife[3963:121184] <-- 10 -[LifeView dealloc] , count = 10--> 

从打印信息可以看到方法"removeFromSuperview"被调用了两次,这是因为在B视图控制器中,主动调用了该方法。如果没有主动调用该方法的话,只会被调用一次。

另外被执行过两次的方法还有"willMoveToWindow"和"didMoveToWindow"。我们可以很好地进行区分,当newWindow存在时,则是实例化创建被第一次调用;而当newWindow为nil时,则是被销毁了,即结束生命周期。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • IOS微信摇一摇声音无法播放的解决办法

    IOS微信摇一摇声音无法播放的解决办法

    这篇文章主要为大家详细介绍了IOS微信摇一摇声音无法播放的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • IOS 获取网络图片大小实例详解

    IOS 获取网络图片大小实例详解

    这篇文章主要介绍了IOS 获取网络图片大小实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • 总结iOS开发中的断点续传与实践

    总结iOS开发中的断点续传与实践

    本文先从断点续传问题开始,介绍断点续传概述和原理。接着结合笔者调研中尝试的 AFHTTPRequestOpeartion,简单分析源码。最后分别基于 NSURLConnection,NSURLSessionDataTask 和 NSURLSessionDownloadTask 去实现应用重启情况下的断点续传。下面一起来看看。
    2016-07-07
  • iOS中json解析出现的null,nil,NSNumber的解决办法

    iOS中json解析出现的null,nil,NSNumber的解决办法

    在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式,通过本文给大家介绍iOS中json解析出现的null,nil,NSNumber的解决办法,感兴趣的朋友参考下
    2016-01-01
  • 详解iOS App开发中UIViewController的loadView方法使用

    详解iOS App开发中UIViewController的loadView方法使用

    这篇文章主要介绍了详解iOS App开发中UIViewController的loadView方法使用,讲解了访问view属性时loadView方法的调用及使用loadView时的一些注意点,需要的朋友可以参考下
    2016-03-03
  • iOS中对文本的字符限制示例详解

    iOS中对文本的字符限制示例详解

    这篇文章主要给大家介绍了关于iOS中对文本的字符限制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • iOS NSCache和NSUrlCache缓存类实现示例详解

    iOS NSCache和NSUrlCache缓存类实现示例详解

    这篇文章主要为大家介绍了iOS NSCache和NSUrlCache缓存类实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • iOS 实现跑马灯效果的方法示例

    iOS 实现跑马灯效果的方法示例

    可能说起跑马灯,大家第一个会想到的就是山寨机。但接下来这篇文章介绍的跑马灯和那个跑马灯是不一样滴。在iOS中,跑马灯是指label上的字自动滚动,形成类似跑马灯似的条幅。下面通过这篇文章我们来一起看看iOS 实现跑马灯效果的方法,有需要的朋友们可以参考借鉴。
    2017-01-01
  • 详解iOS集成GoogleMap(定位、搜索)

    详解iOS集成GoogleMap(定位、搜索)

    这篇文章主要介绍了iOS集成GoogleMap(定位、搜索)需要注意的地方,对此有兴趣的读者一起学习下吧。
    2018-02-02
  • iOS 报clang: error: no input files错误的解决方法

    iOS 报clang: error: no input files错误的解决方法

    这篇文章主要给大家介绍了关于iOS报clang: error: no input files错误的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01

最新评论