开发Tips收集-2016年03月

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

  • UIProgressView 的 subviews 是两个 UIImageView,第一个是 TrackTintColor 层(轨道),第二个是 Progress Tint Color 层(进度)
  • 如果你对文本显示没有特殊要求,可以参考下 UILabel 内部的实现方式:用 NSAttributedString boundingRectWithSize:options:context: 来计算文本宽高,用 -NSAttributedString drawWithRect:options:context: 来绘制文本。尽管这两个方法性能不错,但仍旧需要放到后台线程进行以避免阻塞主线程
  • 为了帮助你发现你的代码的问题,你可以使用Xcode来分析你的代码,帮助你找到出现问题的地方。注意,Xcode分析项目,它会指出每一个潜在的可能出现的问题的地方。从Xcode的 Product菜单选择 Analyze或按 Shift-Command-B.Xcode的将需要片刻的时间,但是当它完成的时候你会在左边的 Issue Navigator看到问题列表。由Analyze发现的问题用蓝色高亮显示
  • 多视图控制器跳转方法
    1. Modal:
      打开:presentViewController
      关闭:dismissViewController
    2. Push:需搭配NavigationController使用,采用压栈和出栈的方式
      打开:pushViewController
      关闭:popViewController
    3. Segue:以上两种方式都可以,如果在打开目标控制器前需要额外处理,可使用perfromSegueWithIdentifier方法。Identifier在storyboard里设置。
  • 设置UIImage的渲染模式:你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color。UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:
    1. UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
    2. UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。
    3. UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。
  • 引入了Foundation以后,数组会映射为AnyObject,而值类型会映射了对应的Foundation类型(比如NSString,NSNumber等),也就是AnyObject了
  • 在lldb中一键打开模拟器sandbox路径:
    打开/.lldbinit,在里面加入一行:
    command alias sb script from subprocess import call; call(["open", '{0:s}'.format(lldb.frame.EvaluateExpression("NSHomeDirectory()")).split("\"")[1]]);
    然后中断时,在lldb里打sb回车,就能打开模拟器当前运行的app的沙箱路径了
  • UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出。
  • UINavigationController有几个常用的方法:
    1:UINavigationController initWithRootViewController:viewController 是指将哪一个视图控制器设置为导航控制器的根视图控制器,即运行是第一次看到的界面。
    2:UINavigationController pushViewController:viewController animated:BOOL 是指将视图控制器送入堆栈,跳转到下一个视图控制器,即下一个界面。
    3:UINavigationController popViewControlleranimated:BOOL 是指将栈顶的试图控制器移出,即返回上一个界面。
    4:UINavigationController popToRootViewControlleranimated:BOOL 是指直接返回到根视图控制器,即返回第一个界面。
    5:UINavigationController popViewController:viewController animated:BOOL 跳转到对应的视图控制器,即相应界面。
    UINavigationController有一个属性,viewcontrollers,它是一个数组,所有视图控制器都被包含在其中,试图控制器在其中的位置跟UINavigationController的顺序一样。可以通过array objectAtIdenx:index得到相应的视图控制器。
  • 在使用单例模式时一般使用allocWithZone,因为alloc最终还是会调用allocWithZone进行分配空间