iOS tips 8

2016-03-06 | 阅读

Bitcode

对于一个framework,不仅有模拟器版本和真机版本,还有不同架构,32位和64位.所以一个库的完整可以用的内容就包含了很多冗余的东西,为了进行APP的瘦身,Apple使用中间代码的形式,也就是Bitcode,我们上传到App store版本的APP中的库为未完全编译的二进制文件,并允许苹果重新优化这些二进制文件,以达到应用瘦身的目的.

但是如果在APP中设置了该属性,就要求APP内的所有库都是设置了Bitcode的.

Copy与MutableCopy

对于OC中的Copy,虽然从名字上,让人以为是真的在进行复制,实际上在很多情况下并不是这样,对于默认实现中可能并不是直接创建了新的对象并复制内容.

默认实现了NSCopying的有NS的基础类型NSNumberNSStringNSMutableStringNSArrayNSMutableArrayNSDictionaryNSMutableDictionary,对于这些类型,不可变版本的Copy事实上,并没有调用创建对象的方法,而只是传递了一个指针而已.而对于mutable版本,其Copy方法才是真正的创建对象并复制,但是这一层终究也是浅复制.

MutableCopy对于对象的复制也是浅复制,但是肯定会创建对象,而不是只传递指针.

如果要实现深复制,肯定要自己来实现NSCopying协议.

TextField输入限制

输入限制只能在TextFieldDelegate中设置,在textField:shouldChangeCharactersInRange:replacementString中,通过:

textField.text.length - range.length + string.length > maxlength;

来进行判断,是否超过最大长度.

TextField输入格式化

输入需要进行格式化处理,使输入内容按照一定格式以空格进行分隔,因为这种格式化会导致光标的异常,处理光标是一件比较麻烦的事.

输入控制在这个回调中进行控制时,对于选中一块进行输入或删除时,会出现光标异常的情况,处理方法是,对于所有textField:shouldChangeCharactersInRange:replacementString直接全部返回NO,正是因为返回的YES导致了textfield自行删除添加,然后导致光标移动,而如果返回NO,首先光标不会乱动,然后在设置光标的位置,使光标显示正常.而由于返回了NO导致无法进行自动输入或删除内容到textField,要使用textfield的UIKeyInput中的insertText:deleteBackward方法来进行内容的输入与删除.

访问本地的网页内容

通过pathForResource:ofType获取地址后,要加上访问的协议类型,即file://.

framework中放置静态资源

framework中可以放置静态资源,但是难以使用.framework的内容不会放入项目中,要能在项目中加载framework的资源.

  1. 将framework放置在build phases中的copy bundle resources中,这样打包时,才会将framework带着静态资源整个装入项目中.
  2. NSBundlepathForResource:ofType进行搜索时,要在静态资源前面加上frameworkName.framework/,因为.framework文件本身就是一个Bundle了.

所以,在framework中放静态资源过于麻烦,还是将所需要的静态资源,以.bundle的形式加载在项目中.