一、loadView
永远不要主动调用这个函数。viewcontroller会在view的property被请求并且当前view值为nil时调用这个函数。如果你手动创建view,你应该重载这个函数。如果你用IB创建view并初始化viewcontroller,那就意味着你使用initWithNibName:bundle:方法,这时,你不应该重载loadView函数。
这个方法的默认实现是这样:先寻找有关可用的nib文件的信息,根据这个信息来加载nib文件,如果没有有关nib文件的信息,默认实现会创建一个空白的UIView对象,然后让这个对象成为controller的主view。
所以,重载这个函数时,你也应该这么做。并把子类的view赋给view属性(property)(你create的view必须是唯一的实例,并且不被其他任何controller共享),而且你重载的这个函数不应该调用super。
如果你要进行进一步初始化你的views,你应该在viewDidLoad函数中去做。在iOS3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。
这个网上的资料都说的很不全面,尤其是蓝色字部分。
二、viewDidLoad
这个函数在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成。而多数情况下是做nib文件的后续工作。
网上资料对这个函数的描述则完全不对。
三、viewDidUnload
这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用,来释放它的view以及view相关的对象。由于controller通常保存这view以及相关object的引用,所以你必须使用这个函数来放弃这些对象的所有权以便内存回收。但不要释放那些难以重建的数据。
通常controller会保存nib文件建立的views的引用,但是也可能会保存着loadView函数创建的对象的引用。最完美的方法是使用合成器方法:
这样合成器会release这个view,如果你没有使用property,那么你得自己显示释放这个view。
网上对这个函数的描述含含糊糊,看了等于没看。
四、结论
所以流程应该是这样:
(loadView/nib文件)来加载view到内存——>viewDidLoad函数进一步初始化这些view——>内存不足时,调用viewDidUnload函数释放views
—->当需要使用view时有回到第一步
如此循环
转载自:点击打开链接
分享到:
相关推荐
主要介绍了IOS 中loadView,viewDidLoad,viewDidUnload详解及使用的相关资料,需要的朋友可以参考下
loadView和viewDidLoad、viewDidUnLoad区别
学长发我的,我无耻的分享给大家了。 希望大家对于那些 viewdidload viewwillappear 的调用顺序有个了解。
主要介绍了详解iOS App开发中UIViewController的loadView方法使用,讲解了访问view属性时loadView方法的调用及使用loadView时的一些注意点,需要的朋友可以参考下
每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCoder放在一起还是非常容易让人混淆的. 昨天看了下苹果官方的相关文档...
revit二次开发在wpf中显示模型,利用Autodesk 提供的PreviewControl 方法,在wpf界面中显示项目中的某个视图
TKLoadView 自定义LoadView API与APPLE的UIActivityIndicatorView相同,并且我已经提供了协议。
我们加载Listview等,往往需要耗时几秒,这和等待过程加上一些交互效果自然会让人感觉输入一些,常见的转圈圈自不必说,但是按照通常的想法,我们往往是加xml里面的view通过隐藏和现实来实现,这种方式实在不太方便...
在ViewDidLoad或LoadView方法中,设置videoPath 。 它可以是本地路径,也可以是 url。 然后,调用play 。 享受 :)例子- ( void )viewDidLoad { [ super viewDidLoad ]; self. videoPath = [[ NSBundle mainBundle...
builder.setView(loadView()); // 图标 builder.setIcon(android.R.drawable.dialog_holo_light_frame); // 设置确定按钮 builder.setPositiveButton("确定", new android.content.DialogInterface....
iOS Widget 开发详解(Today Extension) 疑难杂症记录 interactivePopGestureRecognizer 导致页面卡死 翻译计划 避免 Swift 单元测试中的强制解析 Swift 中的内存泄漏 重写 loadView() 方法使 Swift 视图代码更加...
*在视图中修改的话就在loadView中 *在AppDelegate中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 1.关闭键盘: [[IQKeyboardManager ...
LoadMoreHelper 原SwipeLoadView已经改名为LoadMoreHelper,支持更多刷新控件。 LoadMoreHelper可以为任意下拉刷新控件,多种滚动布局(RecyclerView, ListView, GridView, ExpandableListView等) ...
swift开发脚手架 github:https://github.com/manondidi/swiftArch 1.基于swift4.2框架组件化 2.rxswift做网络回调处理、mock数据管理 3.解耦的tableView和collectionView 4.基于策略模式的分页机制 5.带...
let loadView = LWTGifLoadView(frame:self.view.frame, callback:{ //网络请求 print("重新请求") }) self.view.addSubview(loadView) ``` github下载:https://github.com/winterLiao/GifLoadView
_loadview = [[MBLoadingIndicator alloc ] init ]; // Start the loader [ self .loadview start ]; // Add the loader to our view [ self .view addSubview: self .loadview]; 用法 ###更改百分比 // ...
4.SurfaceView 并不适合作为loadview,这句话并不肯定,因为我没有尝试过其他情况,在我的APP中我用了SurfaceView这个作为loagdview,中间会有些UI不同协同的情况。我并没有舍弃这个控件。正如前面所提的这是个学习...
// 设置LoadView的factory,用于创建使用者自定义的加载失败,加载中,加载更多等布局,写法参照DeFaultLoadViewFactory // ListViewHelper.setLoadViewFractory(new LoadViewFractory()); PullToRefreshListView ...