zoukankan      html  css  js  c++  java
  • 关于OC语法的公开和私有的讨论

    关于OC语法的公开和私有的讨论

    OC语法中,类的.h文件向外面暴露类的功能/方法接口,其中定义的属性/方法/协议/类别/类扩展都属于公开的,但实例变量要看限定词(@protected/@public/@private)。而类.m封装了类内部的实现细节,对外是不公开的。故类.m中定义的实例变量/属性/方法/类扩展/类别/协议等都是私有的,值得一提的是,定义在.m文件类扩展中的实例变量,无论使用什么限定词(即使是@public),都是私有的。

    OC语法可以对类的实例变量加@private/@public等关键字进行修饰。但是对于类的方法只分+开头的类方法和-开头的对象方法,不能对一个类的方法加@private这样的关键字进行限定,那么OC中如何定义私有方法呢?

    答案是:定义在类名.h文件中的方法/属性一定是公开的,而在类名.m中的类延展(Extension)中定义的方法/属性都是私有的。或者不在任何地方申明,只在类.m中写实现代码的方法也是私有的。

    注意:

    Cocoa没有任何真正的私有方法。只要知道对象支持的某个方法的名称,即使该对象所在的类的接口中没有该方法的声明,你也可以调用该方法。不过这么做编译器会报错,但是只要新建一个该类的类别,在类别.h文件中写上原始类该方法的声明,类别.m文件中什么也不写,就可以正常调用私有方法了。这就是传说中的私有方法前向引用。 所以说cocoa没有真正的私有方法。

    OC中如果将类别(Category)和类延展(Extension)单独创建成文件,在使用时导入类别.h和类扩展.h文件,那么定义在类别.h和类扩展.h中的方法都是公开的,类扩展.h中的实例变量需要看使用什么限定词。

    OC中协议是公开的,不属于任何类,只是定义一组方法,只有.h文件,一般直接写在某个类的.h文件中。协议声明的@property只会生成getter setter方法的声明,不会自动生成实现部分(没有.m文件,生成实现部分放在哪啊?)

    iOS开发者交流群:180080550
  • 相关阅读:
    iOS App播放完自己的音视频后,如何重新继续播放后台音乐
    苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法
    Xcode11.1 踩坑备忘录
    foaf
    安卓开发:UI组件-图片控件ImageView(使用Glide)和ScrollView
    安卓开发:UI组件-RadioButton和复选框CheckBox
    安卓开发:UI组件-Button和EditText
    安卓开发:UI组件-布局管理器和文本显示
    基础环境系列:PHP7.3.0并连接pache/IIS和MySQL
    基础环境系列:MySQL8.0.12
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5457700.html
Copyright © 2011-2022 走看看