Chapter5 : View controller & KVC - The Big Nerd Ranch Guide 读书笔记
来源:互联网 发布:桃源恋歌动作数据 编辑:程序博客网 时间:2024/05/17 23:47
View controller 相关函数
当一个view controller被创建的时候,如果view的属性是nil,那么func loadView()函数会被调用。
你可以调用init和initWithNibName等初始化函数去创建一个View controller,但是不要把任何访问view属性的操作放在这里面,因为iOS并不会去初始化一个view,直到需要显示的时候。
你可以把需要访问view的操作放在ViewDidLoad等函数里面。如果是在程序运行的时候,只需要调用一次的操作,放在ViewDidLoad里面。每次view controller显示到屏幕,都要做的操作,放在viewWillAppear里面。
各个函数调用的详细解释:
- application: UIApplication, didFinishLaunchingWithOptions: 当app launch的时候调用,即使你跳到另一个app再回来,也不会再次调用。如果app被杀掉,会再次调用。
- initWithNibName: 当创建一个View controller实例,会被调用一次。如果是创建同样一个view controller类的实例多次,这个函数也会被调用多次;
- loadView:如果想要用程序来创建一个view controller的view,需要override这个函数;
- ViewDidLoad: 如果想要configure views,这些view可能是需要载入一个xib文件,需要override这个函数。当一个view controller的view被创建的时候,这个函数会被调用
- viewWillAppear:如果想要configure views,这些view可能是需要载入一个xib文件,需要override这个函数。每次view显示的时候被调用,view被移出屏幕的时候,会调用viewWillDisappear。
KVC Key-Value-Coding
当一个NIB文件被读进来的时候,这些outlet是通过KVC来设置。KVC是NSObject的一些方法的集合。比如:
- valueForKey: 是一个通用的get方法,比如:
currentFido = self.valueForKey(key:@"fido")
会先找叫fido的方法,如果找到,会执行,然后返回结果给currentFido。如果没有方法叫fido,那么会找叫fido的变量。要是都找不到,那么会给出一个异常
- setValue:forKey: 这是一个通用的setter方法:
self.setValue(userChoice, forKey:@"fido")
如果这里有一个setFido的方法,会调用这个方法,如果没有,会找叫fido的变量。然后设置变量。如果还是找不到,会抛出一个异常。
当load一个NIb文件,系统会用setValue:forKey:来设置outlet。比如,你为interface builder里的对象设置了一个outlet叫rex,那么这个对象需要有setRex方法,或叫rex的变量。如果没有,系统会抛出一个异常。
典型的,当你新建了一个outlet属性叫rex,连接到IB,然后更改了outlet的名字为rex2。系统就会报错:
KVC[913:28116] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<KVC.ViewController 0x7fdbf055bbf0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key rex.'
原因是:再连接以后,系统希望找一个叫setRex的方法,本来是outlet rex的setter。结果没找到。
Retina Display
retian屏是从iPhone 4开始的,分辨率是以前的2倍。
现在来看看对于retian屏要做什么。
- 对于vector图像,也就是向量图,就像是画一个text,drawRect,你不需要做任何额外的事。当你用Core Graphics(也可以叫做Quartz,lines,curves,text)画图的时候,是以point为基本单位,在non-retian屏,一个point等于一个pixel,在retian屏,一个point等于两个pixel
- 对于bitmap图,也就是位图,如果是一个25*25pixel的图,在retian屏上会被拉扯为50*50pixel。
所以你要放2张图,高分辨率的加上@2x后缀。
- Chapter5 : View controller & KVC - The Big Nerd Ranch Guide 读书笔记
- Chapter5: View Redraw 和UIScrollView - The Big Nerd Ranch Guide 读书笔记
- Chapter4: View - The Big Nerd Ranch Guide 读书笔记
- Chapter10. UINavigationController - iOS Programming- The Big Nerd Ranch Guide 读书笔记
- Chapter 6 : Delegation和Debug - The Big Nerd Ranch Guide 读书笔记
- iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于View和View Hierarchy
- iOSProgramming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于 View 的 Redrawing 和 Run Loop
- iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于 View Controllers及其生命周期
- Android编程权威指南Android Programming the big nerd ranch guide
- 《Android 编程权威指南》(Android Programming The Big Nerd Ranch Guide)的代码和问题
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part I & II)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part III)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part IV)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part V)
- 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
- 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
- Android.Programming.The.Big.Nerd.Ranch.Guide.3rd.Edition.2017.2.pdf 英文原版 免费下载
- Android Programming The Big Nerd Ranch Guide,Second Edition第十六章使用相机Intent部分的改进
- 利用Vitamio做自己的视频播放器
- 落单的数
- Android小方法——在Android Studio中进行单元测试
- 1596 find the safest road【floyd】
- 首期百度“金熊掌尖子班”毕业:21个团队获10亿融资
- Chapter5 : View controller & KVC - The Big Nerd Ranch Guide 读书笔记
- python中的有序字典OrderedDict
- category和protocol 第五天稍晚了一些。
- 关于double类型数字相加位数发生变化的问题
- Travelling Salesman Problem (hdu 5402 模拟)
- Android开源项目汇总
- hdu5396 Expression 区间dp +排列组合
- HDU 3255 题解 线段树+扫描线
- Linux基础篇