博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CS193p Lecture 5 - View Controller Lifecycle
阅读量:4653 次
发布时间:2019-06-09

本文共 2800 字,大约阅读时间需要 9 分钟。

1. UITextView

@property(nonatomic,readonly,retain) NSTextStorage *textStorage

是 NSMutableAttributedString 的子类

[self.body.textStorage addAttributes:@{ NSStrokeWidthAttributeName : @-3,

                                            NSStrokeColorAttributeName : [UIColor blackColor]}

                                   range:self.body.selectedRange];

这里的 NSStrokeWidthAttributeName 的 -3 和 3 的区别是:

0表示无描边,正数表示描边,负数表示描边+填充; 

假设原文字是(foreground color)蓝色的,用加了正数属性后,就仅有描边,成为空心轮廓的样式

 

2. View Controller Lifecycle(视图控制器生命周期)

所谓的视图控制器生命周期,其实就是一系列的方法,当事件发生时,会被发送至 UIViewController。如果需要重写这些方法,记得先super,例如:[super viewDidLoad];

解释下super:

向super发送消息时,系统在查找方法时会跳过当前对象的类,从父类开始查询,相当于是先调用了父类的同名方法。

 

viewDidLoad

- (void)viewDidLoad

适合放置视图控制器的初始化代码,一个生命周期中只会调用一次;

输出口(Outlet)已经设置好,故可以设置各种UI的初始化展示;

有一类操作不适合添加:关于视图几何的代码,因为在 viewDidLoad 被调用时,视图的边界(bounds)还没有定下来,它可能不会出现在预定位置,屏幕可能旋转之类的;总之,关于视图的大小、位置(统称几何)的代码不适合放在 viewDidLoad 中;

viewWillAppear

- (void)viewWillAppear:(BOOL)animated

每次视图重新在屏幕上显示时,viewWillAppear 就会被调用;

此时视图的几何信息已经设置,在这里可以执行一些基于几何的初始化;

viewWillDisappear

- (void)viewWillDisappear:(BOOL)animated

当视图从屏幕离开时,viewWillDisappear会被调用;

可以做些记住当前状态或保存数据的操作,以便重新回到视图时恢复; 

viewDidAppear

- (void)viewDidAppear:(BOOL)animated

viewDidDisappear

- (void)viewDidDisappear:(BOOL)animated

viewWillLayoutSubviews

- (void)viewWillLayoutSubviews

当视图的frame变化,子视图重现布局时被调用,比如:屏幕旋转;

viewDidLayoutSubviews

- (void)viewDidLayoutSubviews

Between "will" and "did", autolayout will happen; 

 

didReceiveMemoryWarning

- (void)didReceiveMemoryWarning

系统内存不足时会发送这个消息;

收到这个警告时,需要释放内存,也就是释放堆中的内容,也就是将强指针设为nil; 

 

- (void)setup{ };

- (void)awakeFromNib{

    [self setup];

}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    [self setup];

    return self;

}

 

3. NSNotification

The “radio station” from the MVC slides.

radio station 包括了收听(tune into)消息和广播(broadcast)消息两块,本节只介绍收听的;

收听里面又分了收听系统消息和收听自定义的来自模型的消息,本节只介绍收听系统消息; 

 

每一个iOS应用中都有一个 NSNotificationCenter 对象,对象可以将自己注册为某个通知的观察者(observer),例如:“如果有人找到了我丢失的?,请立即通知我。”当另一个对象发送了一条通知:“我找到一条?。”通知中心就会将这条通知发送给对应的观察者。

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];[nc addObserver:self       selector:@selector(clearCaches)           name:UIApplicationDidReceiveMemoryWarningNotification         object:nil];

- (void)addObserver:(id)observer

           selector:(SEL)aSelector

               name:(NSString *)aName

             object:(id)anObject;

 

[nc removeObserver:self];

[nc removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];

addObserver:表示要收听广播的对象,控制器是最常见的广播收听者,所以这里参数是self;

selector:当收到广播时会执行的方法;
name:广播站的名称;
object:代表你是否只想收听某个特定对象发出的广播,通常这里写nil,表示频率上任何广播都想收听;

说一下SEL和@selector

SEL:指向选择器的指针,或者称为函数指针,是表示要传入的类型;

@selector:Objective-C 不能直接使用函数指针,故造了一个@selector方法来取,它的返回结果是SEL类型,这个类型本质上是方法的编号(函数地址)

 

关闭收听的方法: 

removeObserver

 

4. Demo

 

转载于:https://www.cnblogs.com/mobilefeng/p/4382545.html

你可能感兴趣的文章
什么是API
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>
jquery控制css的display(控制元素的显示与隐藏)
查看>>
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
python第三十九课——面向对象(二)之初始化属性
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
JavaScript 复杂判断的更优雅写法借鉴
查看>>
<mvc:annotation-driven/>浅析
查看>>
ArcEngine开发之自定义工具
查看>>
SQL视频总结
查看>>
P4878 道路修建-美国
查看>>