iOS菜鸟食谱

UIViewController

2015-12-26  本文已影响213人  凌晨四点的洛杉矶

UIViewController是iOS顶层视图的载体及控制器,用户与程序界面的交互都是由UIViewController来控制的,UIViewController管理UIView的生命周期及资源的加载与释放。

UIView

经常有同学问到获取宽度或者坐标时到底用frame 还是 bounds, 在这里说一下最主要的区别, 看情况使用.

UIView 的 framebounds 属性的区别
frame : 相对于父视图的大小和位置, xy 是当前 view 的坐标.
bounds : 相对于自身位置的大小和位置, xy 永远为0, 即屏幕原点 .

UIScreen

CGRect bounds = [UIScreen mainScreen].bounds;
CGRect bounds = [[UIScreen mainScreen] applicationFrame];
CGRect rect = [[UIApplication sharedApplication] statusBarFrame];

执行顺序

  1. alloc -- 创建对象, 分配空间
  2. init -- 初始化对象, 初始化数据
  3. loadView -- 从 nib 载入视图
  4. viewDidLoad -- 载入完成,可以进行自定义数据以及动态创建其他控件
    注: 此方法只在 app 刚开始加载时调用一次,以后不会调用.
  5. viewWillAppear -- 视图将要出现在屏幕上
    注: 此方法可以设置不同方向时设备如何显示
  6. viewDidAppear -- 视图已在屏幕上渲染完成
  7. viewWillDisappear -- 视图将在屏幕上移除
  8. viewDidDisappear -- 视图已经移除
  9. dealloc -- 视图被销毁

内存警告

当程序收到内存警告的时候,会调用每一个ViewController的didReceiveMemoryWarning方法,我们需要做出相应,释放程序中暂时不需要的资源, 通常 vc 中系统已经给我们重写好了此方法, 但记得调用 super 方法.

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    
    float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
    
    if(ver >= 6.0f)
    {
        if(self.isViewLoaded && !self.view.window)
        {
            self.view = nil; //确保下次重新加载
        }
    }
}

上面的代码先取得当前iOS系统的版本号

上一篇下一篇

猜你喜欢

热点阅读