1、日常笔记(二)
是转载,来源太广找不到出处了!
NSRunLoop 和NSOperationQueue
NSRunLoop 是所有要监视的输入源和定时源以及要通知的注册观察者的集合.用来处理诸如鼠标,键盘事件等的输入源
。每一个线程拥有自己的RunLoop有系统自动创建。你不应该自己去创建,只能获取。一般不会用NSRunLoop,因为它不是线程安全的。一般都用CFRunLoop,这个是线程安全的,是一种消息处理模式,我们一般不用进行处理。
NSOperationQueue时一个管理NSOperation的队列。我们会把NSOperation放入queue中进行管理。
内存管理和优化
原则:【黄金法则】
1.1 谁创建,谁释放
(类似于“谁污染,谁治理”)。如果你通过alloc、new或copy来创建一个对象,那么你必须调用release或autorelease。换句话说,不是你创建的,就不用你去释放。例如,你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用release或autorelease。如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease,那么你需要在这个类的dealloc方法中调用release;如果调用了autorelease,那么在dealloc方法中什么都不需要做。
1.2 除了alloc、new或copy之外的方法创建的对象都被声明了autorelease
。
优化:
在收到内存didReceiveMemoryWarning的警告时,释放掉一些不再需要的资源,注意编码规范,如一些变量不使用需要及时的释放。避免是占用太多的内存空间,有时需要用空间去换取时间,尽量使用一些高效的算法和数据结构节约内存空间。最后使用一些内存检测工具和代码的静态分析查找内存泄漏和分配(instrument,leaks,allocations)
。
tableview的优化:
1.1 正确的复用cell。
1.2 减少在返回每个cell里面的处理逻辑和处理时间。尽量将数据进行缓存和复用。
1.3,尽量减少处理加载和计算的时间,不阻塞UI线程。
1.4,尽量使用绘制每个cell。
1.5,设置每个cell的opaque属性
。
1.6,尽量返回每行固定的height。
1.7,在每个cell减少图形效果。
1.8,分段加载数据。
开发App的步骤,开发者账号,发布app到appstore
证书分两种:开发者证书、发布者证书。前者开发时使用,后者发布使用
(1) 模拟器调试无需代码签名;真机调试需开发者证书代码签名;发布时需发布证书签名
(2) 代码签名需要:证书+私钥,
(3) 真机调试时要求在设备上安装描述文件(provision profile)
,该文件包含信息:调试者证书
,
授权调试设备清单
,应用ID
。一个应用对应一个描述文件。
类继承,类的扩展(extension),类别(category)
category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。 继承可以增加,修改或者删除方法,并且可以增加属性。
category和extensions的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。extensions可以认为是一个私有的Category。
app性能测试方式
通过Xcode提供的工具如Instrument,测试CPU,Mermory性能。也可以适用一些开源的自动化测试工具:如Frank,KIF等。
NSArray可以放基本数据类型不(int,float,nil)怎么放进一个结构体
NSArray 只能存放objective-c对象数据模型,这些基本数据类型需要先转化为NSNumber对象再存放进数组中。
常见的语言编码(utf-8,unicode,gb2312,gbk)
常见的语言编码有:
GB2312:简体中文编码,一个汉字占用2字节,在大陆是主要编码方式。BIG5:繁体中文编码。主要在台湾地区采用。 GBK:支持简体及繁体中文,但对他国非拉丁字母语言还是有问题。 UTF-8:Unicode编码的一种。
Unicode用一些基本的保留字符制定了三套编码方式,它们分别UTF-8,UTF-16和UTF-32。在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分。UTF-8俗称“万国码”,可以同屏显示多语种,一个汉字占用3字节。为了做到国际化,网页应尽可能采用UTF-8编码。
常见的加解密方式(rsa,aes,md5)
常见的加解密方式有:
RSA:基于公钥和私钥的非对程加密算法。适用范围广。
AES:是一种对程加密的流行方式。加密涉及矩阵运算。
MD5:将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,
ios应用的调试技巧
1.如遇到crash,分析崩溃日志(symbolicatedrash工具的适用)保留崩溃版本的.dSYM文件
2.在 XCode 中进入断点管理窗口;然后点击右下方的 +,增加新的 Exception Breakpoint。
3.如遇到EXC_BAD_ACCESS,打开Scheme选项选择EditScheme。然后按图勾上Enable Zombie Objects和Malloc Stack那两项。
4.有效的日志管理。NSLog和加入一些开源的日志管理框架。
5.程序断点debug模式。
应用程序性能的调优
(转http://www.open-open.com/lib/view/open1365861753734.html)
- [ ] 1.
用ARC去管理内存
(Use ARC to Manage Memory) - [ ] 2.
适当的地方使用reuseIdentifier
(Use a reuseIdentifier Where Appropriate) - [ ] 3.
尽可能设置视图为不透明
(Set View as Opaque When Possible) - [ ] 4.避免臃肿的XIBs文件(Avoid Fat XiBs)
- [ ] 5.不要阻塞主进程(Don't Block the Main Thread)
- [ ] 6.调整图像视图中的图像尺寸(Size Images to Image Views)
- [ ] 7.选择正确集合(Choose the Correct Collection)
- [ ] 8.启用Gzip压缩(Enable GZIP Compression)
- [ ] 9. 重用和延迟加载视图(Reuse and Lazy Load Views)
- [ ] 10.
缓存,缓存,缓存
(Cache,Cache,Cache) - [ ] 11.考虑绘图(Consider Drawing)
- [ ] 12.处理内存警告(Handle Memory Warnings)
- [ ] 13.重用大开销对象(Reuse Expensive Objects)
- [ ] 14.使用精灵表(Use Sprite Sheets )
- [ ] 15.避免重复处理数据(Avoid Re-Processing Data)
- [ ] 16.选择正确的数据格式(Choose the Right Data Format)
- [ ] 17.适当的设置背景图片(Set Background Images Appropriately)
- [ ] 18.
减少你的网络占用
(Reduce Your Web Footprint) - [ ] 19.设置阴影路径(Set the Shadow Path )
- [ ] 20.
你的表格视图
(Optimize Your Table Views) - [ ] 21.
选择正确的数据存储方式
(Choose Correct Data Storage Option) - [ ] 22.加速启动时间(Speed up Launch Time )
- [ ] 23.
使用自动释放池
(Use AutoRelease Pool) - [ ] 24.
缓存图像
(Cache Images-Or not ) - [ ] 25.尽可能避免日期格式化器(Avoid Date Formatters Where Possible)