找工作前 自我总结一下


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,效果还行,就是换行多了好多...

猜你喜欢

转载自hua397.iteye.com/blog/1821337