http://www.1000phone.net/forum.php?mod=viewthread&tid=10507&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

iPhone开发必不可少的要用到这两个方法。
  他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢?
  viewDidLoad
  此方法只有当view从nib文件初始化的时候才被调用。viewDidLoad用于初始化,加载时用到的。
  loadView
  此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
  - (
  void ) loadView {
  UIView *view
  = [ [ UIView alloc] initWithFrame:[ UIScreen
  mainScreen] .applicationFrame] ;
  [ view
  setBackgroundColor:_color] ;
  self.view = view;
  [ view release] ;
  }
  你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view
  控制器会收到didReceiveMemoryWarning的消息。
  默认的实现是检查当前控制器的view是否在使用。如果它的view不在当前正在使用的view
  hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release,
  loadView方法将被再次调用来创建一个新的view。
  ----------------------------------------------------------------------------------------------------------------------
  viewDidLoad ,不论是从xib中加载视图,还是从loadview生成视图,都会被调用。
  ---------------------------------------------------------------------------------------------------------------------------------------------
  UIViewController 的内存管理
  在 iOS3.0 后,UIViewController 多了一个叫做
  viewDidUnLoad 的方法。
  先看下 UIViewController 从创建 view
  到展示的流程的几个函数
  -init
  -initWithNibName:bundle:
  这两个方法都是初始化一个
  vc,但请注意 view
  不是这时候载入的
  -loadView
  -viewDidLoad
  当一个视图准备展现时,vc 首先会判断
  view 是否已经创建否则便通过之前指定的 xib 文件来初始化 view,以及绑定其他关系(若没有指定 xib 文件,则默认会搜索和 vc 同名的
  xib,比如 myNameViewController 就会搜索 myNameViewController.xib 文件)
  若是没有
  xib 文件,你就可以在 loadview 中自己手动创建这个 viewControoler 需要的视图。接下来就是调用到
  -viewDidLoad,许多人喜欢在这里做些其他事情,比如做个 http 请求、建立个数组啥的。这里若不处理正确,-viewDidUnload
  激活时内存就容易泄露了,稍后提到。
  -view()appear
  -view()disappear
  这几个方法就不解释了
  -viewDidUnload
  该方法在收到内存警告,同时该视图并不在当前界面显示时候会被调用,此时该
  controller 的 view 已经被释放并赋值为 nil。
  接下来你要做的是
  把实例变量的子视图释放(IBOulet
  的,以及自己添加的)
  其他实例变量,比如之前在 -viewDidLoaded 中实例的数据数组、http 请求释放掉
  因为当该
  viewController 再次被激活准备显示时(比如 navigationControler 返回到上一级),vc 发现自己的 view
  为空后会重复之前的流程直到把 view
  给创建起来。若没将自己额外添加的子视图,各种类实例变量释放,这里便会重新再次创建。
  于是,内存泄露了。
  -------------------------------------------------------------------------------------------------------------------------------------------注意iphone开发中的这两个函数viewWillAppear和viewDidAppear
  每当视图准备在屏幕上显示,或者视图已在屏幕上完全显示时,将调用这两个方法。
  viewWillAppear:方法更新准备显示的视图的信息。调用时,视图可能还没有被加载。
  使用viewDidAppear:来触发视图完全显示在屏幕上之后的行为,例如任何动画。
  viewdidload是当程序第一次加载view时调用,以后都不会用到,而viewDidAppear是每当切换到view时就调用。
  loadView和viewDidLoad方法。假设不使用xib文件对视图布局,那么loadView方法必须设置屏幕,并对任何子视图布局。每当继承一个具体的子类,例如UITableViewController或UITabBarController时,务必调用[super
  loadView]或者实现viewDidLoad。这样一来,在进行定制之前,父类可以对屏幕进行适当的设置。当代码基于具体的子类时,苹果的文档和示例代码鼓励使用viewDidLoad。
  viewDidLoad
  此方法只有当view从nib文件初始化的时候才被调用。viewDidLoad用于初始化,加载时用到的。
  loadView
  此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。
  viewDidLoad
  ,不论是从xib中加载视图,还是从loadview生成视图,都会被调用。
  ------------------------------------------------------------------------------------------------------------------------
  loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。 他们都可以用来在视图载入的时候初始化一些内容。
  但是他们有什么区别呢?
  viewDidLoad 方法只有当
  view 从 nib 文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。
  loadView 方法在控制器的 view 为 nil
  的时候被调用。 此方法用于以编程的方式创建 view 的时候用到。loadView
  是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
  - ( void ) loadView {
  UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
  mainScreen]
  .applicationFrame] ;
  [ view setBackgroundColor:_color] ;
  self.view =
  view;
  [ view release] ;
  }
  你在控制器中实现了 loadView
  方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到 didReceiveMemoryWarning
  的消息。 默认的实现是检查当前控制器的 view 是否在使用。 如果它的 view 不在当前正在使用的 view hierarchy 里面,且你的控制器实现了
  loadView 方法,那么这个 view 将被 release, loadView 方法将被再次调用来创建一个新的 view。
  nil是空的意思。相当于NULL。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。
  首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
  在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。
  在Objective-C中,你来对象在功能上等价于其他很多语言中的NULL指针。区别是可以对nil调用方法,而不致导致程序崩溃或抛出异常。
  ---------------------------------------------------------------------------------------------------------------------
  一、loadView
  永远不要主动调用这个函数。view
  controller会在view的property被请求并且当前view值为nil时调用这个函数。如果你手动创建view,你应该重载这个函数。如果你用IB创建view并初始化view
  controller,那就意味着你使用initWithNibName:bundle:方法,这时,你不应该重载loadView函数。
  这个方法的默认实现是这样:先寻找有关可用的nib文件的信息,根据这个信息来加载nib文件,如果没有有关nib文件的信息,默认实现会创建一个空白的UIView对象,然后让这个对象成为controller的主view。
  所以,重载这个函数时,你也应该这么做。并把子类的view赋给view属性(property)(你create的view必须是唯一的实例,并且不被其他任何controller共享),而且你重载的这个函数不应该调用super。
  如果你要进行进一步初始化你的views,你应该在viewDidLoad函数中去做。在iOS
  3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。
  这个网上的资料都说的很不全面,尤其是蓝色字部分。
  二、viewDidLoad
  这个函数在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成。而多数情况下是做nib文件的后续工作。
  三、viewDidUnload
  这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用,来释放它的view以及view相关的对象。由于controller通常保存这view以及相关object的引用,所以你必须使用这个函数来放弃这些对象的所有权以便内存回收。但不要释放那些难以重建的数据。
  通常controller会保存nib文件建立的views的引用,但是也可能会保存着loadView函数创建的对象的引用。最完美的方法是使用合成器方法:self.myCertainView = nil
  这样合成器会release这个view,如果你没有使用property,那么你得自己显示释放这个view。
  网上对这个函数的描述含含糊糊,看了等于没看。
  四、结论
  所以流程应该是这样:
  (loadView/nib文件)来加载view到内存
  ——>viewDidLoad函数进一步初始化这些view
  ——>内存不足时,调用viewDidUnload函数释放views
  —->当需要使用view时有回到第一步
  如此循环
  ----------------------------------------------------------------------------------------------------------------------
  viewDidUnload方法‍
  当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
  内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS
  3.0及以后viewDidUnload方法是更好的方式
  在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release
  view时已经将其release掉了)
  -----------------------------------------------------------------------------------------------------------------------注意iphone开发中的这两个函数viewWillAppear和viewDidAppear
  每当视图准备在屏幕上显示,或者视图已在屏幕上完全显示时,将调用这两个方法。
  viewWillAppear:方法更新准备显示的视图的信息。调用时,视图可能还没有被加载。
  使用viewDidAppear:来触发视图完全显示在屏幕上之后的行为,例如任何动画。
  loadView和viewDidLoad方法。假设不使用xib文件对视图布局,那么loadView方法必须设置屏幕,并对任何子视图布局。每当继承一个具体的子类,例如UITableViewController或UITabBarController时,务必调用[super
  loadView]或者实现viewDidLoad。这样一来,在进行定制之前,父类可以对屏幕进行适当的设置。当代码基于具体的子类时,苹果的文档和示例代码鼓励使用viewDidLoad。
  iPhone开发必不可少的要用到这两个方法(loadView VS viewDidLoad
  )。 他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢?
  viewDidLoad
  此方法只有当view从nib文件初始化的时候才被调用。viewDidLoad用于初始化,加载时用到的。
  loadView 此方法在控制器的view为nil的时候被调用。
  此方法用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。
  viewDidLoad
  ,不论是从xib中加载视图,还是从loadview生成视图,都会被调用。
  ---------------------------------------------------------------------------------------------------------------------
  iPhone开发必不可少的要用到这两个方法。他们都可以用来在视图载入的时候,初始化一些内容。
  但是他们有什么区别呢?
  viewDidLoad
  此方法只有当view从nib文件初始化的时候才被调用。
  loadView
  此方法在控制器的view为nil的时候被调用。此方法用于以编程的方式创建view的时候用到。
  如:
  -
  (void)loadView {
  UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
  [view
  setBackgroundColor:_color];
  self.view = view;
  [view release];
  }
  你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view
  控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。
  如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release,
  loadView方法将被再次调用来创建一个新的view。
  ------------------------------------------------------------------------------------------------------------------------
  loadView 和 viewDidLoad 是 iPhone
  开发中肯定要用到的两个方法。
  他们都可以用来在视图载入的时候初始化一些内容。 但是他们有什么区别呢?
  viewDidLoad 方法只有当 view 从 nib
  文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。
  loadView 方法在控制器的 view 为nil 的时候被调用。此方法用于以编程的方式创建 view 的时候用到。loadView
  是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
  - ( void ) loadView {
  UIView *view = [ [ UIView
  alloc] initWithFrame:[ UIScreen
  mainScreen] .applicationFrame] ;
  [ view
  setBackgroundColor:_color] ;
  self.view = view;
  [ view release]
  ;
  }
  你在控制器中实现了 loadView
  方法,那么你可能会在应用运行的某个时候被内存管理控制调用。如果设备内存不足的时候,view 控制器会收到 didReceiveMemoryWarning
  的消息。 默认的实现是检查当前控制器的 view 是否在使用。 如果它的 view 不在当前正在使用的 view hierarchy
  里面,且你的控制器实现了 loadView 方法,那么这个 view 将被 release, loadView 方法将被再次调用来创建一个新的
  view。
  ------------------------------------------------------------------------------------------------------------------------
  viewDidUnload方法
  当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
  内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS
  3.0及以后viewDidUnload方法是更好的方式。
  ------------------------------------------------------------------------------------------------------------------------
  由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起
  init方法
  在init方法中实例化必要的对象(遵从LazyLoad思想)
  ‍  init方法中初始化ViewController本身
  loadView方法
  当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
  如果手工维护views,必须重载重写该方法
  如果使用IB维护views,必须不能重载重写该方法
  loadView和IB构建view
  你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view
  控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。 如果它的view不在当前正在使用的view
  hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release,
  loadView方法将被再次调用来创建一个新的view。
  viewDidLoad方法
  viewDidLoad
  此方法只有当view从nib文件初始化的时候才被调用。
  重载重写该方法以进一步定制view
  在iPhone OS
  3.0及之后的版本中,还应该重载重写viewDidUnload来释放对view的任何索引
  viewDidLoad后调用数据Model
  ‍
  viewDidUnload方法‍
  当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
  内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS
  3.0及以后viewDidUnload方法是更好的方式
  在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release
  view时已经将其release掉了)
  在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等
  release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release
  view时已经将其release掉了)
  一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行
  viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象
  dealloc方法
  viewDidUnload和dealloc方法没有关联,dealloc还是继续做它该做的事情。
  文章二:
  viewDidUnload
  该方法在收到内存警告,同时该视图并不在当前界面显示时候会被调用,此时该 controller 的 view
  已经被释放并赋值为 nil。
  接下来你要做的是
  把实例变量的子视图释放(IBOulet 的,以及自己添加的)
  其他实例变量,比如之前在
  -viewDidLoaded 中实例的数据数组、http 请求释放掉
  因为当该 viewController 再次被激活准备显示时(比如
  navigationControler 返回到上一级),vc 发现自己的 view 为空后会重复之前的流程直到把 view
  给创建起来。若没将自己额外添加的子视图,各种类实例变量释放,这里便会重新再次创建
  ---------------------------------------------------------------------------------------------------------------------
  loadView 和 viewDidLoad 的区别
  分享
  loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。
  他们都可以用来在视图载入的时候初始化一些内容。 但是他们有什么区别呢?
  viewDidLoad 方法只有当 view 从 nib
  文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。
  loadView 方法在控制器的 view 为 nil 的时候被调用。
  此方法用于以编程的方式创建 view 的时候用到。loadView
  是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
  -
  (void)loadView {
  UIView * tmp=[[UIView alloc] initWithFrame:CGRectMake(0,
  0, 320, 480)];
  tmp.backgroundColor=[UIColor
  orangeColor];
  self.view=tmp;
  [tmp release];
  }
  你在控制器中实现了
  loadView 方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到
  didReceiveMemoryWarning 的消息。 默认的实现是检查当前控制器的 view 是否在使用。 如果它的 view 不在当前正在使用的 view
  hierarchy 里面,且你的控制器实现了 loadView 方法,那么这个 view 将被 release, loadView
  方法将被再次调用来创建一个新的 view。
  ----------------------------------------------------------------------------------------------------------------------
  -(void)viewWillAppearBOOL)animated,- (void)viewDidLoad
  的区别。
  viewwillappear是每次视图控制器的视图出现前执行的代码。而viewdidload是每次视图控制器载入是执行的代码。
  比如说:当a视图控制器的视图第一次出现是两个都要执行,但当a被push后有pop回来时,只有viewwillappear执行。
  loadView 和 viewDidLoad 的区别
  分享
  loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。
  他们都可以用来在视图载入的时候初始化一些内容。 但是他们有什么区别呢?
  viewDidLoad 方法只有当 view 从 nib
  文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。
  loadView 方法在控制器的 view 为 nil 的时候被调用。
  此方法用于以编程的方式创建 view 的时候用到。loadView
  是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。如:
  -
  (void)loadView {
  UIView * tmp=[[UIView alloc] initWithFrame:CGRectMake(0,
  0, 320, 480)];
  tmp.backgroundColor=[UIColor
  orangeColor];
  self.view=tmp;
  [tmp release];
  }
  你在控制器中实现了
  loadView 方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到
  didReceiveMemoryWarning 的消息。 默认的实现是检查当前控制器的 view 是否在使用。 如果它的 view 不在当前正在使用的 view
  hierarchy 里面,且你的控制器实现了 loadView 方法,那么这个 view 将被 release, loadView
  方法将被再次调用来创建一个新的 view。

iOS开发之loadView和viewDidLoad总结的更多相关文章

  1. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  2. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  3. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  4. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  5. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  6. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  7. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  8. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

  9. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

随机推荐

  1. sql server pivot/unpivot 行列互转

    有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20 ...

  2. 淘宝api 开发_获取用户信息

    string url = "http://gw.api.taobao.com/router/rest"; "; string appsecret = "fdf7 ...

  3. 电脑只能上QQ,不能上网浏览网站怎么解决

    这个问题通常是因为网络的DNS解析出错引起的.QQ一类的聊天软件有自动的网络解析,不需要DNS便可以使用,而一般的浏览器是需要DNS解析来访问网页的.所谓DNS,即域名服务器(Domain Name ...

  4. 201521123011《Java程序设计》 第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  5. HTTP之请求消息Request

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...

  6. ceph状态信息靠谱查询

    1)检查集群的状态汇总信息: [root@haha1 clouder]# ceph -s cluster 8e136e25-77ab-4e0b-b24b-232a7b466cfe health HEA ...

  7. POJ 2406 KMP 循环节

    给一个字符串.求这个串的最小的循环节的长度. 好像.num = len/(len-next[len]) 就是循环节的长度.如果 len%(len-next[len]) ==0 就是 说字符串长度刚好是 ...

  8. 1087. [SCOI2005]互不侵犯King【状压DP】

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...

  9. Apache+tomcat配置动静分离(一个apache一个tomcat,没有做集群)

    1. 下载apache http server,tomcat,mok_jk.so apache下载地址:http://httpd.apache.org/download.cgi tomcat下载地址: ...

  10. elementUI 学习入门之 layout 布局

    layout 布局 通过基础的 24 分栏,可进行快速布局 基础布局 使用单一分栏创建基础的栅格布局, 通过 span 属性指定每栏的大小 <el-col :span="8" ...