`

injection for XCode 的局限性

阅读更多
injection作为Xcode的插件,还是有局限性的。
injection的作用域主要集中在静态变量、静态或全局函数及其Swift的当量(按:Swift equivalents)。
以下是作者贴的示例代码:



* 一个潜在的问题是,当类的新版本被加载,它带有自己的静态变量版本如sharedInstance和once标记。发生injected后,将产生一个新的单一实例。
      To prevent this, class methods with the prefix "shared" are not swizzled on injection to support this common idiom.      
      以上这句我捉摸了很久还是没有吃透。
* 它可以浏览所有正在运行的应用程序的内存。为了确定类和实例调用injectied的回调,injection执行一次“扫描”,找到在内存中的所有对象。粗略地说,这涉及到在看一个对象,然后通过递归寻找它所指向的对象。例如,对象的实例变量和内容(properties)。
      This process is seeded using the application's delegate and all windows.(按:这个过程通过应用程序的代理和所有的窗口)。一旦所有在内存中的引用被收集,injection将会过滤这些它已经编译和injected的引用,。然后再将被引用信息的回调部分发送出去。
      如果没有找到引用注入的内容,Injection将通过sharedInstance查找所有被涉及到的对象。如果没有找到任何对象,那么,Injection将找不到你的实例。这会导致你无法在你的app中进行回调函数的调用。
* 函数dispatch_on_main无法被injected,因为它已被静态地链接到应用程序。然但是,injection可以通过代码示例里的doSomething方法进行inject。dispatch_on_main将会被链接到本地的在被injected对象文件的一个新版本中。


以上内容参考:https://github.com/johnno1962/injectionforxcode 
  • 大小: 63.2 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics