KVC:
1.key-value-coiding
最常用就是dic,imutable的就是直接初始化kv,然后取值,mutable的各种setObject: forKey:(注意obj不能为nil,object被retain)
userdefaults也常用,setObject: forKey:和dic的区别在于obj是被copy(app中用过,set一个mutableDic,而取值出来得创建个新的mutableDic,即initWIthDic:d)
再一个,看NSKeyValueCoding.h中的setValue: forKey:
如果是NSObject,具体为自定义的类,它有self.key=value的作用(当然远比这个复杂,具体见函数上的一坨注释),有两个注意的地方,一个是value为nil,就有exception(没重写setNilValueForKey的前提下),一个是key如果在类遍历不到,就有undefineKey的exception
如果是mutableDic,没啥说的,它实际上会调用setObject: ForKey,取值调objectForKey
有个发现:
如果是NSArray,setObject它会向每一个元素发送set消息,而取值则是每一个元素取出来后组成一个数组返回
2.key-value-observe
这个主要就一个监控,key对应的value改变时会有个回调(之前友盟是用userdefault保存token,而且它controller内部有改微博账号的功能,只能从外部监控,前提是先把userDefault打印研究一下它用的keyPath,实际上就用的key)
具体做看文档即可
addObserver: forKeyPath
内存管理:
1.编码中注意配对,即alloc/retain/copy和relese的配对,基本就能保证显式的引用计数平衡,至于隐式的就是self.property赋值时的默认实现
2.autorelease延时释放,时候不确定,不滥用就行
xcode调试:
1.有error信息的,这个好办,无非是unregonizer selector这些,查代码即可,当然有些数组越界的涉及逻辑的就慢慢单步了
2.bad_access,开Zombie或者看malloc_history
3.直接崩,跳至appDelegate显示signal的,这种一般是exception,把全局的exception断点打开即可定位
4.小技巧:
po+地址 输出对象信息
shell malloc_history 进程号+地址 输出分配内存的过程
bt n 查看栈顶n条信息(这个主要是我的xcode 4.2不输出stack信息了..)
instrument:
看红线溢出
库的使用:
1.基本库:文件操作,网络请求,quartz 2d,音视频,拍照/相册,定位/地图
2.第三方:son,asi/socket,fmdb,友盟,lame,上下拉刷新,瀑布流,hud,正则,富文本label,tar/gzip压缩解压
PS:第一次用rtf->html->bbcode,效果还行,就是换行多了好多...