从网上各位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的

  1. @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
  2. 欢迎拍砖指正。

UIViewController生命周期控制-开发规范的更多相关文章

  1. UIViewController生命周期控制

    UIViewController生命周期控制 UIViewController介绍 官方的介绍例如以下 The UIViewController class provides the fundamen ...

  2. iOS UIViewController生命周期控制

    具体流程,看下图: init方法在init方法中实例化必要的对象(遵从LazyLoad思想)init方法中初始化ViewController本身 loadView方法当view需要被展示而它却是nil ...

  3. 【iOS开发】iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...

  4. initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏

    当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代 ...

  5. iOS对UIViewController生命周期和属性方法的解析

    目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实 ...

  6. Vue.js 子组件的异步加载及其生命周期控制

    前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...

  7. Newbe.Claptrap 框架如何实现多级生命周期控制?

    Newbe.Claptrap 框架如何实现多级生命周期控制?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Lifetime Scope. 特别感谢 kotone 为本文提供的校对建议 ...

  8. UIViewController生命周期

    UIViewController生命周期

  9. 你真的了解UIViewController生命周期吗?

    一:首先了解一下生命周期图 二:UIViewController 生命周期介绍 1.通过alloc init 分配内存,初始化controller. 2.loadView loadView方法默认实现 ...

随机推荐

  1. 使用FlexPaper实现在线预览

    准备工作 1.下载并安装安装OpenOffice 2.下载并安装FlexPaper 3.下载jodconverter 5.下载并安装swftools 软件安装具体方式按照 这篇博客 :http://b ...

  2. 是否是有效的dom节点--轮子代码

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  3. 》》stroll--各种特效下拉菜单

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. HDU3507 Print Article (斜率优化DP基础复习)

    pid=3507">传送门 大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M. 首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2 ...

  5. POJ3621 Sightseeing Cows(最优比率环)

    题目链接:id=3621">http://poj.org/problem?id=3621 在一个有向图中选一个环,使得环上的点权和除以边权和最大.求这个比值. 经典的分数规划问题,我认 ...

  6. 沉迷 Docker,无法自拔(在 Docker 中运行 MySQL)

    记得之前做网站开发的时候,因为服务端用的 MySQL 数据库,为了方便调试以及隔离生产与开发环境,自己就在本地也安装了一个 MySQL 数据库.但是用着用着慢慢的也发现了一些不舒服的地方,比如常驻后台 ...

  7. Python笔记·第七章—— IO(文件)处理

    一.文件处理简介 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知 ...

  8. System.out.println()的解释

    上周面试的时候,面试官让我解释一下输出语句每一个单词是什么意思.当是有点蒙,后来想想这不就是考察对java中常用的的包,类和其中的方法的熟悉程度吗? 我们首先来看看System:这是一个类名,存在于j ...

  9. shell 参数记录

    $0  执行脚本的名称 $* 和 $@ 所有参数 $#  参数个数 $_  上个命令的最后一个参数 $$  代表当前命令所在的pid $!  代表最后执行的 '后台' 命令的pid $? 代表上条命令 ...

  10. check the manual that corresponds to your MySQL server version for the right syntax处理方案

    check the manual that corresponds to your MySQL server version for the right syntax:代码出现这样的bug,就要注意你 ...