iOS 小知识点(二)

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)

你可能感兴趣的:(iOS 小知识点(二))