从网上各位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. GDAL编译

    使用cmd命令行编译 1.首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示” ...

  2. JaveScript变量的简介及其变量的简单使用(JS知识点归纳一)

    变量简介 "变量是一个容器" 为什么要有变量? 程序的执行过程中,会使用到许多的数据(用户输入的内容,动态效果的运动数据等),当这些数据需要重复在多个地方使用的时候,就需要一个容器 ...

  3. java.util.ConcurrentModificationException 异常问题详解

    环境:JDK 1.8.0_111 在Java开发过程中,使用iterator遍历集合的同时对集合进行修改就会出现java.util.ConcurrentModificationException异常, ...

  4. 为PHP摇旗呐喊!

    如今市场上的电子商务软件基本上可归结为两大阵营.即PHP阵营和Java阵营.但对接触电子商务不久的用户来说.看到的往往仅仅是它们的表相,仅仅是明显的价格差异.却非常难看出它们之间的实际差异.事实上,P ...

  5. [Elasticsearch] 邻近匹配 (二) - 多值字段,邻近程度与相关度

    多值字段(Multivalue Fields) 在多值字段上使用短语匹配会产生古怪的行为: PUT /my_index/groups/1 { "names": [ "Jo ...

  6. 数据结构(C实现)------- 最小生成树之Prim算法

    [本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020] 算法描写叙述 假设连通图是一个网,则称该网中全部生成树中权值总和最小的生成树 ...

  7. NFS介绍和安装

    NFS简单介绍 NFS 是Network File System的缩写,即网络文件系统. 一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外发布.功能是通过网络让不同的机器.不同的操作 ...

  8. M03 利用Accord 进行机器学习的第一个小例子

    01 安装 Visual studio 2017. 不具备安装这个的话,也可安装,Microsoft Visual Studio Express (or equivalent) 02 创建 C# 的 ...

  9. 关于SQLALCHEMY之(一)

    SQLALCHEMY是一个不可靠的方案.对于初级开发者而言,并不如SQL语句来得简明. 或者说,我不知道是不是所有的ORM数据库对象映射方案都存在这么一种情况.纯以开发逻辑而言.下述两段代码的结论是一 ...

  10. [UWP]了解TypeConverter

    1. 前言 TypeConverter是XAML解释器的幕后功臣,它做了大量工作,从WPF诞生以来,几乎每一次XAML的运作都有它的参与.虽然UWP中TypeConverter已经彻彻底底退居幕后,连 ...