iOS开发冷知识

  • tabBar

UITabBarControllersuper init 里面会调 self.view
所以继承时 ,viewDidLoad 会比我们自己的 init 先调
平时写 viewDidLoad 直接搞到 init

  • 类型

在Swift里面AnyObject?必须是类,如果需要传入protocol类型的参数,可以换成Any?

  • 相机

AVCaptureSession 自定义相机界面

  • 直播的第三方库

https://github.com/ltebean/Live

  • iOS 启动连续闪退保护方案
    GYBootingProtection

  • %.xf 显示小数点后x位

  • 《招聘一个靠谱的iOS》面试题

  • 下面代码中为什么可以直接用self?

    [UIView animateWithDuration:1 animations:^{
        self.view.backgroundColor = [UIColor yellowColor];
    }];
    

答:当 block 本身不被 self 持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用 weak self 了。最常见的代码就是 UIView 的动画代码,我们在使用 UIView 的 animateWithDuration:animations方法 做动画的时候,并不需要使用 weak self,因为引用持有关系是:

UIView 的某个负责动画的对象持有了 block
block 持有了 self
因为 self 并不持有 block,所以就没有循环引用产生,因为就不需要使用 weak self 了。

  [UIView animateWithDuration:0.2 animations:^{
      self.alpha = 1;
  }];

当动画结束时,UIView 会结束持有这个 block,如果没有别的对象持有 block 的话,block 对象就会释放掉,从而 block 会释放掉对于 self 的持有。整个内存引用关系被解除。

  • 当一个View的bounds原点不为0的时候会出现什么情况?

  1. 它可以修改自己坐标系的原点位置,影响“子view”的显示位置。
  1. bounds,它可以通过改变宽高,改变自身的frame,进而影响到再父视图的显示位置和大小。
    详细解释
  • 什么时候用NS_OPTIONS,NS_ENUM?

NS_ENUM定义通用枚举,NS_OPTIONS定义位移枚举
位移枚举即是在你需要的地方可以同时存在多个枚举值如这样:

  UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] init];
  swipeGR.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
  //这里几个枚举项同时存在表示它的方向同时包含1.向下2.向左3.向右

而NS_ENUM定义的枚举不能几个枚举项同时存在,只能选择其中一项,像这样:

  NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
  paragraph.baseWritingDirection = NSWritingDirectionNatural;

详细解释

  • 渐进式图片加载

当图片从网络中获取的时候,可能由于过大,数据缓慢,这时候就需要渐进式加载图片来显示。主要通过CFData对象来实现:

创建一个CFData去添加image data.

创建一个渐进式图片资源,通过 CGImageSourceCreateIncremental

获取图片数据到CFData中

调用CGImageSourceUpdateData函数,传递CFData和一个bool值,去描述这个数据是否包含全部图片数据或者只是部分数据。无论什么情况,这个data包含已经积累的全部图片文件。

如果已经有足够的图片数据,可以通过函数绘制CGImageSourceCreateImageAtIndex部分图片,然后记得要Release掉它。

检查是否已经有全部的图片数据通过使用CGImageSourceGetStatusAtIndex函数。如果图片是完整的,函数返回值为kCGImageStatusComplete。否则继续3,4步骤,直到获得全部数据。

Release掉渐进式增长的image source。

  • __weak 和 __block 区别

__weak 本身是可以避免循环引用的问题的,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong 的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题。

__block 本身无法避免循环引用的问题,但是我们可以通过在 block 内部手动把 blockObj 赋值为 nil 的方式来避免循环引用的问题。另外一点就是 __block 修饰的变量在 block 内外都是唯一的,要注意这个特性可能带来的隐患。
详细解释

  • swift工程编译越来越慢

swift工程编译越来越慢,原来...
Build Time Analyzer for Swift

  • OC禅道

https://www.gitbook.com/book/yourtion/objc-zen-book-cn
优化UITableViewCell高度计算的那些事

  • BASE64 详解

  • 解决double精度缺失的问题

NSDecimalNumber

https://juejin.im/post/5949edd68d6d8109de26c6bb?utm_source=gold_browser_extension

你可能感兴趣的:(iOS开发冷知识)