开发Tips收集-2016年05月

这些小Tips为本人近期读书笔记,收集来自网络开发者发布的技术文档,并非原创,共享的目的是为了扩散分享技术,共同进步。如有侵权不得转载等情况,请联系我告知,谢谢!

  • UIImage两种初始化方式的区别:
      使用imageNamed:第一次读取的时候,先把这个图片放到缓存里,下次再使用到这个同名图片的时候直接从缓存中读取;优点:方便快捷,只有第一次使用的时候稍慢,接下来再使用就会稍微快点;缺点:如果在当前工程中只使用一次会浪费内存。(这个内存在程序关闭的时候才释放)
      使用initWithContentsOfFile:每次都会根据路径去读取,不会占用内存,如果图片在当前工程中只使用一次,应该选择这个方法
  • UIView和CALayer的区别与联系)
    1. 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
    2. 在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
    3. CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
    4. layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer
    5. 两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以
  • 在使用 ImagesQA.xcassets 时需要注意:将图片直接拖入image到ImagesQA.xcassets中时,图片的名字会保留。这个时候如果图片的名字过长,那么这个名字会存入到ImagesQA.xcassets中,名字过长会引起SourceTree判断异常。
  • UIScrollView添加了一个很好用的属性keyboardDismissMode,这样可以让键盘在滚动时自动收起。这个属性使用了新的UIScrollViewKeyboardDismissMode enum枚举类型。这个enum枚举类型可能的值如下:
  • 你看到的是非授权版本!爬虫凶猛,请尊重知识产权!

    转载请注明出处:http://conanwhf.github.io/2016/05/31/Tips201605/

    访问原文「开发Tips收集-2016年05月」获取最佳阅读体验并参与讨论

    1. UIScrollViewKeyboardDismissModeNone,
    2. UIScrollViewKeyboardDismissModeOnDrag, // dismisses the keyboard when a drag begins
    3. UIScrollViewKeyboardDismissModeInteractive, // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
  • iOS加载启动图的时候隐藏statusbar只需要在info.plist中加入Status bar is initially hidden,设置为YES就好
  • NSDate 在保存数据,传输数据中,一般最好使用UTC时间。在显示到界面给用户看的时候,需要转换为本地时间。
  • UITableViewCell中,对cell设置indentationLevel的值,可以将cell 分级别。还有 CGFloat indentationWidth属性,设置缩进的宽度。总缩进的宽度 = indentationLevel * indentationWidth
  • static的使用:
    1. 修饰局部变量,修改的是生命周期,在整个程序运行过程中,只初始化一次,而且只有一份内存,并没有改变作用域
    2. 修饰全局变量,修改的是作用域。没有被static修饰的全局变量,项目中的任何文件,可以访问;static修饰的全局变量,只在当前文件中访问
  • isMemberOfClass 和 isKindOfClass:两者都能检测一个对象是不是某个类的成员;isKindOfClass不仅能确定一个对象是不是某个类的成员,也能确定一个对象是否是派生自该类的类的成员,而isMemberOfClass只能做到前者.
  • TCP 和UDP 的区别与联系:TCP 为传输控制层协议,为面向连接,可靠的,点到点的通信;UDP 为用户数据报协议,非连接的不可靠的点到多点的通信;TCP 侧重可靠传输,UDP 侧重快速传输
  • 读写小文件是 iPhone 的一大弱点。16MB 的文件测试与 Mac 的测试结果差不多,但是 16 字节的文件测试 iPhone 花了 Mac 10 倍的时间。相比 Mac,iPhone 的存储设备吞吐量很高,但是有一些额外的延迟。
  • iOS的应用都是通过bundle进行封装的,对应的bundle类型是Application类型,平时我们通过XCode编译出来的Target(即我们开发的应用),其实就是一个Application类型bundle,即一个文件夹!但是Finder会把这个bundle当做一个文件显示给我们,其实是因为这个bundle自身也是一个package,而Mac系统会把所有的package当做一个文件来对待,显示给用户,从而防止用户误操作导致程序文件损坏或丢失。
  • NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一个抽象. NSURLConnettion是用来指代 Foundation 框架中的一系列组件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名类 NSURLConnection.
  • NSURLSession 不仅仅包括同名的 NSURLSession, 还包括NSURLRequest 和 NSURLCache. 同时将NSURLConnection 对应为NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三个子类,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.
  • 和 NSURLConnection 相比, NSURLSession 最大的改变可以配置每一个缓存的session 缓存, cookie 值,协议以及证书策略甚至夸程序共享这些信息.这保证了程序和网络框架之间的相互独立.每一个 NSURLSession 有一个 NSURLSessionConfiguration 来进行初始化, NSURLSessionConfiguration指定了策略,以及在移动设备上增强性能的选项.NSURLSession 的另一个特点就是 session Task, 用来处理的上传和下载.和 NSURLConnection 最大的不同之处在于,所有的 task 共享其创造者 NSURLSession.
  • NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用来处理连接层的问题(服务器的信任,客户端证书的评估等),Task 的代理方法用来处理鉴权查询和以网络请求有关的问题.
  • AVAudioPlayer包含在 AVFoundation框架中,所以开发的时候首先导入音频的框架AVFoundation.framework。注意:引入头文件 #import \
    AVAudioPlayer的初始化的时候需要给一个播放文件:AVAudioPlayer  *avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:文件路径 error:nil];
    
  • 要修改app名字的时候最好不要修改product,可以在info.plist中修改Bundle display name.
  • 当UIWebView播放视频时,可以看到view hierarchy里有FigPluginView的身影。这个类来自于QuickTime Plugin,plugin的路径为:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Internet Plug-Ins/QuickTime Plugin.webplugin,这是个文件夹,里面还有链接库以及文件和图片资源。