延展

编程入门 行业动态 更新时间:2024-10-10 02:24:00

延展

延展

  • 延展(Extension).是1个特殊的分类.

    • 延展是1个分类.比较特殊.
    • 所以它的作用:也是用来扩展1个类.
  • 特殊在于:

    • -> 这个分类没有名字.叫做匿名分类
    • -> 这个分类只有声明.不能有单独的实现. 与本类共享1个实现.
    @interface Student ()@end
  • 我们新建1个延展.只会生成1个.h文件.

    • 这个延展的声明

    @interface 本类名 ()

    @end

    • 没有单独的实现

  • 延展的特点

    • -> 可以在延展中声明属性.
    • -> 可以在延展中声明@property
      • 并且会自动的生成私有属性. 也会生成getter、setter的声明和实现.
      • getter和setter的实现是在本类的实现文件中.
  • -> 可以在延展中声明方法.但是方法的实现要实现在本类的实现中.

  • 延展和分类的相同点: 都是对1个类进行扩展.

  • 延展和分类的区别:

    • . 声明是不一样的。 分类是有分类名的 而延展没有分类名 是匿名.
    • . 分类有声明和实现 延展只有声明 没有实现. 和本类共享实现.
    • . 分类只能声明方法和@property(不能生成私有属性)
    • 延展 可以声明属性 方法 @property会自动生成私有属性.

  • 分类和延展的各自的使用场景
    • 分类是用来为本类添加方法的
    • 延展不仅可以为本类添加方法 还可以添加属性.

  • 延展的应用场景.

  • 我们可能会有这样的需求:

    • 写1个私有的@property.这个@propety生成的属性、getter、setter都不允许被外界访问.只在类的内部访问.
    • 有人说,那我手动实现就好: 在@implementation之中写1个私有属性,在写1个私有的getter和setter。
    • 我想说,太麻烦. 本来1个@property可以搞定的事情干嘛还要写这么多代码呢?
  • 解决方案:

    • 将类的延展写在类的.m文件上. 就可以在延展中定义@property、方法、属性.
    • 那么这个时候,@property生成的属性、getter、setter都是私有的.外部无法访问.

    // Person.m

 #import "Person.h"@interface Person ()//可以在这类声明属性、方法、@property@end@implementation Person//本类的方法实现.//延展的方法实现.//在这里可以访问延展中定义的成员.@end
  • 使用建议:

    • 如果@property、方法、属性需要被外界访问,就定义在本类的声明中.
    • 如果不需要被外界访问.就定义在延展之中.

      经典应用案例: iOS开发的控制器.

实现为类写私有成员的方式

  • 在类的.m文件之中,写上1个延展. 将成员定义在延展之中.
    • 那么定义在延展之中的成员就是私有成员 只能在类的内部访问
    • 在类的外部是无法访问的.

  • 总结

    • . 延展绝大多数情况下,不会独占1个文件.
      • 因为延展的作用就是用来私有化类的成员的. 属性 方法 @property
    • . 延展大多数情况下,是写在本类模块的.m文件中.
      • 如果类的成员需要被外界访问 这些成员就定义在本类的声明之中,
      • 如果类的成员只希望在类的内部访问 那么就可以将其定义在延展之中.

  • 延展作用: 是用来私有化类的成员. 如果类中有些成员我们希望只在类的内部访问
    - 那么就在类的实现中写1个延展 将需要私有化的成员写在延展之中.

    • 延展中的成员只能在类的内部访问 不能再类的外部访问.

更多推荐

延展

本文发布于:2024-03-12 19:34:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732249.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!