UIViewController生命周期控制-开发规范
从网上各位iOS们收集并总结:

各方法使用:
- init 中初始化一些UI组件,比如UIButton,UILabel等
- loadView 中
- createFields 接受参数,初始化变量
- createViews 创建视图
- createEvents 绑定事件,如按钮的点击,NotificationCenter,kvo等
- viewDidLoad
- loadData 加载数据,调用一些api
- dealloc(现在dealloc中做的事我放在了viewDidDisapper中)
- destroyEvents 取消事件的绑定
- destroyViews 释放,销毁视图
- destroyFields 释放,销毁引用的变量
- didReceiveMemoryWarning
- cleanData 释放一些可以释放的数据
- 额外
- enterForeground 进入前台时调用
- enterBackground 进入后台时调用
规范文件内部组织结构:
统一UIViewController风格,首先是头文件:
@interfaceUIViewController(base)
#pragma mark- model
// 定义model
#pragma mark- view
// 定义view
#pragma mark- api
// 定义api @end
#pragma mark - api
// 对外的接口
#pragma mark - rewrite
// 额外的重写的父类的方法
#pragma mark -private
//...
#pragma mark -响应 model 的地方
//...
#pragma mark 1 notification
//...
#pragma mark 2 KVO
//...
#pragma mark -响应 view 的地方
//...
#pragma mark 1 target-action
//...
#pragma mark 2delegate dataSource protocol
//...
#pragma mark -其他
//...
统一命名:
实现可以用runtime,也可以用基类,个人推荐是用基类,但是下面的代码是runtime的
@implementationUIViewController(base)
+(void)load {
XY_swizzleInstanceMethod([UIViewControllerclass],@selector(loadView),@selector(xy__loadView));
XY_swizzleInstanceMethod([UIViewControllerclass],@selector(viewDidLoad),@selector(xy__viewDidLoad));
XY_swizzleInstanceMethod([UIViewControllerclass],NSSelectorFromString(@"dealloc"),@selector(xy__dealloc));
XY_swizzleInstanceMethod([UIViewControllerclass],@selector(didReceiveMemoryWarning),@selector(xy__didReceiveMemoryWarning));
}
-(void) xy__loadView {
[self xy__loadView];
if([self respondsToSelector:@selector(createFields)])
[self performSelector:@selector(createFields)];
if([self respondsToSelector:@selector(createViews)])
[self performSelector:@selector(createViews)];
if([self respondsToSelector:@selector(enterBackground)]){
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
}
if([self respondsToSelector:@selector(enterForeground)]){
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
}
if([self respondsToSelector:@selector(createEvents)])
[self performSelector:@selector(createEvents)];
}
-(void)xy__dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
if([self respondsToSelector:@selector(destroyEvents)])
[self performSelector:@selector(destroyEvents)];
if([self respondsToSelector:@selector(destroyViews)])
[self performSelector:@selector(destroyViews)];
if([self respondsToSelector:@selector(destroyFields)])
[self performSelector:@selector(destroyFields)];
[self xy__dealloc];
}
-(void)xy__viewDidLoad {
if([self respondsToSelector:@selector(loadData)])
[self performSelector:@selector(loadData)];
[self xy__viewDidLoad];
}
-(void)xy__didReceiveMemoryWarning {
if([self isViewLoaded]&&[self.view window]== nil){
if([self respondsToSelector:@selector(cleanData)])
[self performSelector:@selector(cleanData)];
}
[self xy__didReceiveMemoryWarning];
}
@end- 欢迎拍砖指正。
UIViewController生命周期控制-开发规范的更多相关文章
- UIViewController生命周期控制
UIViewController生命周期控制 UIViewController介绍 官方的介绍例如以下 The UIViewController class provides the fundamen ...
- iOS UIViewController生命周期控制
具体流程,看下图: init方法在init方法中实例化必要的对象(遵从LazyLoad思想)init方法中初始化ViewController本身 loadView方法当view需要被展示而它却是nil ...
- 【iOS开发】iOS对UIViewController生命周期和属性方法的解析
iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...
- initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏
当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代 ...
- iOS对UIViewController生命周期和属性方法的解析
目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实 ...
- Vue.js 子组件的异步加载及其生命周期控制
前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...
- Newbe.Claptrap 框架如何实现多级生命周期控制?
Newbe.Claptrap 框架如何实现多级生命周期控制?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Lifetime Scope. 特别感谢 kotone 为本文提供的校对建议 ...
- UIViewController生命周期
UIViewController生命周期
- 你真的了解UIViewController生命周期吗?
一:首先了解一下生命周期图 二:UIViewController 生命周期介绍 1.通过alloc init 分配内存,初始化controller. 2.loadView loadView方法默认实现 ...
随机推荐
- 教你如何用 lib-flexible 实现移动端H5页面适配
前话 好久没写教程了(可能会误导新手的菜鸟教程( ̄▽ ̄)"). 这是我的github,欢迎前端大大们和我一起学习交流 https://github.com/pwcong 最近入职公司做前端实 ...
- [hdu 4869](14年多校I题)Turn the pokers 找规律+拓欧逆元
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 数据结构--二叉查找树的java实现
上代码: package com.itany.erchachazhaoshu; public class BinarySearchTree<T extends Comparable<? s ...
- Struts2学习笔记整理(二)
这里是重点. Action接口 struts2 的Action可以是POJO 为了让用户开发的Action更加规范struts2提供了一个Action接口 ActionSupport基类 Struts ...
- JavaScript导航树
JS导航树 整理之前的小代码片段,放到博客,便于以后完善查看: 该JS导航树实际效果,[GSP+社区网站专题课程页面导航树]地址:http://gsp.inspur.com/knowledge/zhu ...
- 《编程语言实现模式》【PDF】下载
<编程语言实现模式> 编程语言实现模式旨在传授构建语言应用(工具)的经验和理念,教读者构建自己的语言应用.这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理.分析.翻译输 ...
- C# 委托高级应用----线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- HTTP协议------->资源和URL
1.前言 最近在研究http,希望结合书本,对网上资料进行整合,用“人话”聊聊这个玩意儿- 计划用近十篇文章,详尽的说清楚以下一些问题: URL和资源.HTTP报文是什么东西? HTTP是怎样进行链接 ...
- web基础笔记整理(一)
一.程序的分层 1.界面层: 某种类型的应用程序 a.DOS(控制台运行) b.桌面应用程序--独立安装,独立运行 c.web类型--现在流行的 单机版:电脑上要安装,程序升级之后,电脑上也要升级-- ...
- xml生成方式二(Xml序列化器XmlSerializer)
一.andoirdAPI提供了xml生成和解析的API: XmlSerializer xs = Xml.newSerializer();和XmlPullParser xmlPullParser = X ...