美文网首页
class extension-实现面向对象编程的信息隐藏

class extension-实现面向对象编程的信息隐藏

作者: Crazy2015 | 来源:发表于2020-03-29 12:56 被阅读0次
    .h
    @interface Things : NSObject
    @property (assign) NSInteger things1;
    @property (readonly, assign) NSIngteger things2;
    
    - (void)resetAllValues;
    @end
    
    
    .m
    @interface Things ()
    {
    NSInteger thing4;
    }
    @property (readwrite, assign) NSInteger things2;
    @propery (assign) NSInteger things3;
    
    @end
    
    

    添加私有属性和方法来扩展它。这也就是它被称为类扩展的原因。

    仔细看一下things2属性,已经在头文件中定义过这个属性。那在extension中对它做了什么?

    改变了它的读写权限,标记为readwrite,这样编译器就会生成setter方法了,不过它是只能在这个类中访问的私有方法了,而公共接口中,则只有getter方法了。

    还添加了私有属性things3,它只可以在这个类的内部使用。

    另外还添加了一个名为thing4的实例变量,它同样也是私有的。

    为什么要做这些事情呢?

    面向对象编程的一个特征就是信息隐藏。你只会把用户需要看到的展示出来,其他的则不需要。比如内部的实现的细节。这些技术可以帮助你实现这样的细节。

    Extension是什么

    Extension有一种说法叫『匿名分类』,因为它很像分类,但没有分类名。严格来说要叫类扩展

    Extension的作用是将原来放在.h中的数据放到.m中去,私有化,变成私有的声明。

    Extension是在编译的时候将所有的数据都合并到类中去

    Extension一般用来做什么

    声明私有属性

    声明私有方法

    声明私有变量

    Extension的特点以及Extension与Category的区别

    编译时决议(在编译的时候就将扩展的所有数据合并到类中去)

    只以声明的形式存在,多数情况下寄生于宿主类的.m中

    不能为系统类添加扩展

    相关文章

      网友评论

          本文标题:class extension-实现面向对象编程的信息隐藏

          本文链接:https://www.haomeiwen.com/subject/xniyuhtx.html