国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

IOS UIView的生命周期的實例詳解

2019-10-21 18:44:45
字體:
供稿:網(wǎng)友

IOS UIView的生命周期的實例詳解

任何對象的者有一個生命周期,即都存在一個實例化到銷毀的過程。

UIView對象也不例外,那么UIView從init/new開始后,直到dealloc結束的過程中都經(jīng)歷了哪些過程呢?

首先自定義繼承自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出來時,被調(diào)用的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時,被調(diào)用的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"被調(diào)用了兩次,這是因為在B視圖控制器中,主動調(diào)用了該方法。如果沒有主動調(diào)用該方法的話,只會被調(diào)用一次。

另外被執(zhí)行過兩次的方法還有"willMoveToWindow"和"didMoveToWindow"。我們可以很好地進行區(qū)分,當newWindow存在時,則是實例化創(chuàng)建被第一次調(diào)用;而當newWindow為nil時,則是被銷毀了,即結束生命周期。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 保康县| 阜城县| 五原县| 易门县| 扶绥县| 蓝田县| 磐安县| 克拉玛依市| 宣恩县| 彭山县| 阜阳市| 东城区| 宁强县| 沙河市| 农安县| 紫云| 萝北县| 南宁市| 博罗县| 武宁县| 平果县| 莱阳市| 东乡县| 海林市| 湟中县| 随州市| 司法| 伽师县| 交城县| 牙克石市| 腾冲县| 项城市| 如东县| 肥乡县| 浦东新区| 平乐县| 四会市| 孝义市| 正镶白旗| 唐河县| 遂昌县|