iOS开发之OC入门(分类的使用)

分类category

如果把全部方法写在一个模块里面,后期难以维护和管理,分类就是将一个类分为多个模块

  • 创建类的时候选择category
  • 模块的文件名:本类名+分类名.h 本类名+分类名.m
  • 当一个类很杂,可以使用分类,将相似的方法写在同一个模块之中
/// 代表对已有的类添加一个分类,一个类可以有多个分类,分类用名字区分
@interface Student (itcast分类名)

@end

@implementation Student (itcast分类名)

@end

分类的使用

  • 要访问分类中定义的成员,就要把分类的头文件引进来
  • 分类只能增加方法,不能增加属性
  • 分类可以使用@property,但是不会生成私有属性,也不会生成getter setter的实现,只会生成getter setter的声明,可以去本类中定义属性,自己在分类中写getter setter的实现
  • 在分类的方法实现中不可以直接访问本类的真私有属性(定义在@implementation之中),但是可以调用本类的getter setter来访问属性
  • 当分类中同名方法的时候,优先调用分类的方法,哪怕没有引入分类的头文件,如果多个分类有相同的方法,优先调用最后编译的分类

非正式协议

为系统自带的类写分类,这个叫做非正式协议

  • 为已经存在的类添加方法

延展Extension

特殊的分类,也是类的一部分
延展这个特殊的分类没有名字,只有声明没有实现,和本类共享一个实现
一般将延展直接写在本类是实现文件中,用于生成内部私有属性和私有方法

// 声明
@interface 本类名()

@end
// 没有实现,和本类共享一个实现
  • 延展和分类的区别:分类只能新增方法,延展中任意成员都可以写
  • 分类可以写@property,但是只会生成getter setter的声明
  • 延展写@property,会自动生成私有属性,也会生成getter setter的声明和实现
  • 应用场景:要为类写一个私有的@property,生成的getter setter方法只能内部访问,不能外部访问
  • 定义一个真私有属性或者私有方法可以定义在@implementation之中,但是不规范,写一个延展,将其定义在延展之中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值