@objc和下划线_ 在OC和Swift混编中的作用

1、@objc

Swift 的静态语言特性,每个函数的调用在编译期间就可以确定。因此在编译完成后可以检测出没有被调用到的 swift 函数,优化删除后可以减小最后二进制文件的大小。
而OC是动态语言,函数的调用在运行时才能确定有没有被调用。所以为了避免OC找不到swift的函数,添加 @objc 的方法表示这个方法是被OC调用的,这样swift在编译的时候,虽然检测到这个函数暂时没有被调用,但是也不会被优化删除,编译进项目-Swift文件中。

作用:把函数编译进项目-Swift文件中。
这样在OC调用swift的方法的时候就不会报找不到这个方法了。

2、下划线 _

忽略参数名(show me code)

eg:
2.1加下划线
@objc func OnLocalVideoInit(_ session: AVCaptureSession)

生成的OC函数名是:

  • (void)OnLocalVideoInit:(AVCaptureSession * _Nonnull)session;

2.2不加下划线
@objc func OnLocalVideoInit(session: AVCaptureSession)

生成的OC函数名是:

  • (void)OnLocalVideoInitWithSession:(AVCaptureSession * _Nonnull)session;

通过2.1和2.2的例子可以很清晰的看出下划线在OC和Swift混编中的作用了

你可能感兴趣的:(@objc和下划线_ 在OC和Swift混编中的作用)