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风格,首先是头文件:

1 @interfaceUIViewController(base)
2 #pragma mark- model
3 // 定义model
4 #pragma mark- view
5 // 定义view
6 #pragma mark- api
7 // 定义api
8
9 @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. 欢迎拍砖指正。

来自为知笔记(Wiz)

时间: 2024-08-01 12:55:04

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

UIViewController生命周期控制

UIViewController生命周期控制 UIViewController介绍 官方的介绍例如以下 The UIViewController class provides the fundamental view-management model for all iOS apps. You rarely instantiate UIViewController objects directly. Instead, you instantiate subclasses of the UIVie

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

iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有条有理的展示在我们的View层上.iOS中的UIViewController是UIKit框架中最基本的一个类.从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础.基于UIViewController的封装和扩展,也能够出色的完成各种复杂界面逻辑.这篇博客,旨在讨论UIV

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

当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代码创建UI控件的时候就会调用: initWithCoder:从文件中解析一个对象的时候就会调用这个方法,也就是说无论是通过代码还是xib,程序运行的时候都会调用这个方法: awakeFromNib:当一个对象从xib或者storyboard中加载完毕后,就会调用一次. 比如:当苹果官方提供的按钮不能

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

目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实例的传值陷阱 四.UIViewController与StroyBoard的相关相互方法 1.ViewController直接在StoryBoard中进行跳转的传值 2.使用代码跳转Storyboard中的controller 五.UIViewController之间的一些从属关系 1.parentV

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

一:首先了解一下生命周期图 二:UIViewController 生命周期介绍 1.通过alloc init 分配内存,初始化controller. 2.loadView loadView方法默认实现[super loadView] 如果在初始化controller时指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果没传xib文件名,默认会加载跟controller同名的xib文件,如果没找到相关联的xib文件,就会创建一个空白的UIView,然后赋給controller的

RxJava 和 RxAndroid 三(生命周期控制和内存优化)

RxJava 和 RxAndroid 三(生命周期控制和内存优化) rxjava rxandroid 前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroidRxJava 和 RxAndroid 二(操作符的使用) RxJava使我们很方便的使用链式编程,代码看起来既简洁又优雅.但是RxJava使用起来也是有副作用的,使用的越来越多的订阅,内存开销也会变得很大,稍不留神就会出现内存溢出的情况,这篇文章就是介绍Rxj

浅谈UIViewController生命周期

UIViewController是IOS中顶层视图的载体和控制器,用户与程序界面的交互都是由UIViewController来控制的,UIViewController管理UIView的生命周期及资源的加载与释放. 我们创建一个简单的demo来测试一下其生命周期,新建两个ViewController,一个是A页面,一个是B页面.A页面有个按钮可以跳转到B页面,并且在每个ViewController的每个方法中都添加了NSLog来打印其状态.截取AViewController.m部分代码如下,  #

【iOS】UIViewController生命周期

UIViewController有2周期: 在UIViewController中,View存在两个循环:载入循环和卸载循环. 载入循环 1>程序请求controller的view. 2>假设view在内存中,则直接载入.相反,假设不存在.则UIViewController调用loadView方法. 3>loadView方法运行例如以下操作: 假设你重载了这种方法,则必须创建必要的view而且将一个非nil值传给UIViewController的view属性. 假设你没有重载这个函数,UI

软件生命周期以及开发模型

一.软件生命周期: 可行性研究,需求分析(这两步是软件定义) 概要设计.详细设计.实现.集成测试.确认测试:属于软件开发 使用与维护.退役:维护. 二.软件开发模型: 1.以软件需求可完全确定为前提的瀑布模型 2.在软件开发初期只能提供基本需求所采用的渐进式开发模型如:原型模型.螺旋模型. 3.以形式化开发方法为基础的变换模型. 三.瀑布模型 1.主要思想:a.软件开发过程与软件生命周期一致 b.相邻二阶段之间存在因果关系 c.需对阶段性产品进行评审. 2.不足:a.缺乏灵活性 b.到最后阶段才