swift权限访问

  • 1.访问权限
  • public:
    • Framework 是可以被任何人使用的,你可以将其设置为 public 级别
  • internal:(默认权限)
  • app 或 Framework 的内部结构使用 internal 级别
  • private:
    • 只能在当前源文件中使用的实体。使用 private 级别,可以隐藏某些功能的特地的实现细节
    • 不希望暴露的方法,应该使用 private 修饰符
  • 2.swift之所以快是因为他是在编译的时候就将那个函数里面的那个方法确定好了,也称之为静态派发
  • 3.OC是静态派发的,也就是说当一个对象发送一个消息机制的时候OC会动态的去寻找这个方法(动态派发),从这一点来看swift比oc的性能要好很多
  • 4.在开发中,需要让外界调用我们的私有方法,在前面加上private,例如:
private func composeBtnOnClick(){
        YJLog("---")
    }
  • 5 但是如果这个方法是按钮点击调用的方法,如果这样搞就会出现问题,程序直接崩溃

为什么会崩溃?

因为swift是静态派发的,private只能在当前源文件中使用的实体,也就是说只能在当前类里面调用这个方法,点击事件是有系统调用的,这个时候系统找不到这方法就会崩溃

为了提升性能, Swift会在编译时确定方法和属性, 如果想让Swift支持OC的动态派发那么必须在前面加上@objc
  • 添加 @objc 修饰符并不意味着这个方法或者属性会变成动态派发,Swift 依然可能会将其优化为静态调用
  • 如果你需要和 Objective-C 里动态调用时相同的运行时特性的话,你需要使用的修饰符是 dynamic
现在问题是: 我们既不需要让外界调用我的这个方法,又不想让他崩溃怎么办?
  • 6 解决办法: 在方法前面加上@ojbc,例如: 这样就不会崩溃了,告诉系统我的这个方法用OC的动态派发
@objc private func composeBtnOnClick(){
        YJLog("---")
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容