loadview:

//   有没有nib 只要是复写了loadview loadview都会被执行     有nib文件的话加载的是nib文件的view  没有的话会按照loadview里的代码加载

也就是说程序先会执行loadview方法,然后再去加载nib文件。

UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访问。但没有调用loadView方法时,self.view=nil。loadView 在每一次使用self.view这个property,并且self.view为nil的时候被调用,用以产生一个有效的self.view。这个接口原 本是为了让我们自定义view用的。你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。 如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。

[super loadView]的效果,就是产生了一个有效的view,也就是一个空白的view来保证view在使用时不为nil,但这并不是Cocoa的设计者所期望的。

loadView仅仅应该在开发者希望自行通过编码而不是Interface Builder定制view的时候被实现,而且不应该在其中调用[super loadView],你的loadView中应该有self.view = …这样的行为。

看两个例子:

例子1、

-(void) loadView {

//[super loadView];

NSLog(@"loadView Called");

}

- (void) viewDidLoad {

[super viewDidLoad];

UIButton *customButton = [UIButton buttonWith.....

......

[self.view addSubView:customButton];

}

当 不使用IB来创建视图的时候,在viewDidLoad中使用view之前,系统会自动调用loadView来创建一个view,但例子1中的 loadView除了打印一句话之外什么都没干,所以loadView会被不同的调用,但程序仍不能正常运行,因为没有有有效的 view,self.view的值始终为nil。注意:我没有调用[super loadView],如果加上这句就可以了,这样会产生一个空白的view,但这不是苹果希望的。

例子2、

- (void)loadView

{

[super loadView];

textView=[ [ UITextView alloc ] initWithFrame: [[ UIScreen mainScreen ] applicationFrame];

textView.text=@"Hello";

[self.view addSubview: textView];

}

- (void)loadView

{

textView=[ [ UITextView alloc ] initWithFrame: [ [ UIScreen mainScreen ] applicationFrame ] ];

textView.text=@"Hello";

self.view=textView;

}

两 段代码起到的作用相同,但前一个例子把textView加入到self.view中,而后者则让self.view直接指向了 textView。把textView加入到self.view中则self.view不能为nil,因此需要调用[super loadView]方法,后者不需要。

显然,继承UIViewController的subclass要实现其load方法时,若采用添加view的方式,我们只要在loadView中增加一句[super loadView]就没有问题了。但这并不是Cocoa的设计者所期望的。self.view = …才是提倡的方式。

看了一些大侠的帖子,有这么说的:

{当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。

如果手工维护views,必须重载重写该方法

如果使用IB维护views,必须不能重载重写该方法}

开始时对上述感觉很迷惑,我想这不是他想表达的本意

self.view = [[[NSBundle mainBundle] loadNibNamed:@"OneNibName" owner:self options:nil] lastObject];

我想在loadView中这样用也是可以的,我是手工维护view,但view是从IB中加载的。

还有一点,和loadView一个界别的还有一个方法initWithNibName, 这个方法是在controller中的类在IB中创建,但是通过Xcode实例化controller的时候用的.(建立一个viewBase的模板工 程,然后打开MainWindow.xib,删除其中的viewController,然后回到viewController.m中,把第一个方法 initWithNibName注释取消掉,然后加入一条你喜欢的打印语句,试试是不是这样的)

一般的用法是在loadView/initWithNibName里面创建基本的界面,然后在viewDidLoad里读入数据,然后根据数据再将各view设置为正确的状态。

 

[转]loadView的用法,loadView创建基本界面,DidLoad读入数据的更多相关文章

  1. Autocad.net利用Xaml创建Ribbon界面

    0.Ribbon界面 Ribbon界面设计语言最早于Office 2007出现,后来逐渐被其他Windows系统组件采用,一些专业软件也开始以Ribbon界面取代传统菜单栏设计.Ribbon设计语言显 ...

  2. 微信js框架第二篇(创建完整界面布局)

    接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面       页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...

  3. alertDialog创建登陆界面,判断用户输入

    alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: public boolean ...

  4. Yii2创建多界面主题(Theme)

    Yii2界面主题上的设计总体上和Yii1.x保持一致,区别在于两个地方: 1. 由于Yii2引入了独立的视图(View)类,因此界面主题(Theme)也交由视图来管理: 2. 视图文件和Web资源在目 ...

  5. Android研究之动态创建UI界面具体解释

     Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...

  6. OpenCV中Mat的基本用法:创建、复制

    OpenCV中Mat的基本用法:创建.复制 一.Mat类的创建: 1.方法一: 通过读入一张图像,直接将其转换成Mat对象. Mat image = imread("test.jpg&quo ...

  7. IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)

    在XCode 4.2后,我基本上的应用都不使用Xib文件了,虽然xib文件有很多好趣,可以快速免代码构建视窗,可以减少好多代码构建带来的麻烦,其实能用xib还是不错的,主要是我的机器打开xib来编辑时 ...

  8. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  9. Qt on Android:创建可伸缩界面

    使用 Qt 来开发 Android 应用,也需要适配不同移动设备,适配多种多样的屏幕和分辨率.这次我们大概来讲一下如何使用 Qt 提供的机制来创建可伸缩的界面. DPI 必须要解释一下 DPI . D ...

随机推荐

  1. Redux基础

    Redux 是一个状态容器 Redux 就像是作者自己的介绍,它不会为你提供任何的东西,它不会告诉你如何做路由,它只专注于应用程序状态,是一个 JavasSript 的状态容器,所有的状态的变化都是当 ...

  2. android 性能測试iozone篇

    一:简单介绍 iozone是一个文件系统的benchmark工具, 用于測试不同的操作系统中文件系统的读写性能, 能够測试下面13种模式 0=write/rewrite 1=read/re-read ...

  3. ACM算法

      一.数论算法 1.求两数的最大公约数 2.求两数的最小公倍数 3.素数的求法 A.小范围内判断一个数是否为质数: B.判断longint范围内的数是否为素数(包含求50000以内的素数表): 二. ...

  4. Java对多线程~~~Fork/Join同步和异步帧

    于Fork/Join骨架,当提交的任务,有两个同步和异步模式.它已被用于invokeAll()该方法是同步的.是任何 务提交后,这种方法不会返回直到全部的任务都处理完了.而还有还有一种方式,就是使用f ...

  5. P31RestKit.dll 2.0 Unity3d json

    using System.Collections.Generic; using UnityEngine; using System.Collections; using Prime31; public ...

  6. 教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题)

    原文:教你发布Silverlight Bussiness Application(SQL Server 登录,局域网访问,以及使用ArcGIS Server服务需要注意的问题) 之前发布过Silver ...

  7. 【百度地图API】如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅、加油站、宾馆、大厦等

    原文:[百度地图API]如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅.加油站.宾馆.大厦等 摘要: 在LBS上有这样一个常用的功能,查找附近所有的关键点(POI点,比如标志 ...

  8. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  9. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理(4)

    提前几天把检查更新的功能完成了.

  10. NSNotification、delegate和KVO的区别

    1.效率:delegate比nsnotification高.2. delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值, 也就是delegat ...