iOS开发能力提升

  1. 关联对象Associated Object,相关函数

    1
    2
    3
    objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)
    objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
    id _Nullable value, objc_AssociationPolicy policy)

    可能的应用场景:给系统控件增加属性

    1. 关键字:dynamic 动态属性
    2. runtime

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      appInit() {
      let test = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.viewDidLoad))
      let test2 = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.newMethod))
      method_exchangeImplementations(test!, test2!)
      }

      extension UIViewController {
      @objc func newMethod() {
      #if DEBUG
      DLog("\(type(of: self)) was loaded by \(type(of: self.parent))")
      #endif

      self.newMethod()
      }
      }
    3. struct和class之间的抉择:
      a. 默认选struct: 拷贝赋值型,影响相对较小
      b. 与OC交互时,需要使用class型
      c. 需要区分不同实例的时候,使用class(操作符===)

    4. KVO/KVC/Keypath/NSKeyValueObservation !!!

    5. 单例

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      //通用单例
      class Singleton {
      static let sharedInstance = Singleton()
      }

      //如果初始化的时候,需要进行其他操作
      class Singleton {
      static let sharedInstance: Singleton = {
      let instance = Singleton()
      // setup code
      return instance
      }()
      }
    6. 自动打包 fastlane

Contents
,