iOS OC和Swift混编杂记

228 阅读1分钟

项目名-Bridging-Header.h

swift桥接文件,创建 swift 文件时 Xcode 自动创建,也可以手动创建, swift调用oc的时候,需要将调用的 OC文件/三方库 通过 #import 的形式添加到桥接文件内

项目名-Swift.h

项目执行 build 成功后,系统自动创建 oc调用swift的时候,需要在oc文件中通过 #import 的形式将项目名-Swift.h 文件添加到OC文件中

OC在使用Swift 三方类库的时候,需要通过 @import 的形式引入到对应文件中

weak 和 unowned区别

  • weak 代表着弱引用。当对象被声明为 weak 时,父层级对此对象没有指向,该对象的引用计数不会增加1。它在对象释放后弱引用也随即消失。继续访问该对象,程序会得到 nil,不亏崩溃
  • unowned 与弱引用本质上一样。不同的是,unowned 无主引用 实例销毁后仍然存储着实例的内存地址(类似于OC中的unsafe_unretained), 试图在实例销毁后访问无主引用,会产生运行时错误(野指针)

weak相对于unowned更兼容,更安全,而unowned性能更高;这是因为weak需要操作散列表,而unowned只需要操作64位位域信息;在使用unowned的时候,要确保其修饰的属性一定有值; 那么针对弱引用无主引用如何选择呢?

  • 如果强引用的双方生命周期没有任何关系,使用weak,如delegate
  • 如果其中一个对象销毁,另一个对象也跟着销毁,则使用unowned