美文网首页
OC 类别(分类)+类扩展

OC 类别(分类)+类扩展

作者: 李琪_59dc | 来源:发表于2017-09-29 11:11 被阅读0次

适用范围

  1. 当你已经封装好了一个类(也可能是系统类、第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类,只需要给你原来的类增加一个分类。
  2. 将一个大型的类拆分成不同的分类,在不同分类中实现类别声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发。
  3. 分类中的方法可以只声明,不实现,所以在协议不支持可选方法的时候(协议现在已经支持可选方法),通常把分类作为非正式协议使用。

定义

  1. 类别是类的补丁,不能修改类内部源码,却又希望添加新的功能时使用
  2. 只要保证类别名称唯一,就可以向一个类中添加任何数量的类别。

语法/具体使用

新建类别文件的命名:“原来类名+补充”
eg: NSString+SayHello

//.h头文件
@interface NSString (HelloWord,HelloWord2)
//不可以定义成员属性
@end
//.m实现文件
@implementation NSString (HelloWord,HelloWord2)
@end

类别缺陷

  1. 类别只能添加方法,不能添加成员变量
    可以在类别中添加属性,但必须是@dynamic类型的。写了属性后也不会在类中自动添加成员变量,好处是可以通过点表达式来访问setter和getter方法。
  2. 当类别中的方法与现有的方法重名时,类别中的方法具有更高的优先级。

功能

  1. 使用类别为一个类的“隐藏方法”添加声明(向前引用)
    如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
  2. 分散一个大型的类
      #pragma mark- UI相关   用注释的方式管理方法,来自C语言
    
  3. 创建非正式协议 ,委托

补充: 类扩展

类扩展是类别的一种特殊形式

语法格式

@interface 主类类名()//类扩展类别不需要命名
@end
  • 扩展通常定义在主类.m文件中,扩展中声明的方法直接在主类.m文件中实现。
  • 扩展中可以声明实例变量,可以声明属性
  • 因为扩展通常定义在主类的.m文件中,所以扩展声明的方法和属性通常是私有的。

类别和类扩展的区别

  • 分类不可以声明实例变量,通常是公开的,文件名是:主类名+分类名.h
  • 类扩展是可以声明实例变量的,是私有的,文件名是:主类名_扩展标识.h,在主类的.m文件中#import该头文件

使用方法

定义 Person类的扩展

  1. 方式一:以单独的文件定义
    “Person_ExtensionWork.h”文件:
#import"Person.h"

@interface Person ()
@property(nonatomic, copy)NSString *stringExtension;
- (void)testExtension;
@end
  1. 方式二:在主类的.m文件中定义(推荐)

    “Person.m”文件:

#import"Person.h"

@interface Person ()
@property(nonatomic, copy)NSString *stringExtension;
- (void)testExtension;
@end


@implementation Person
- (void)testExtension {
   self.stringExtension = @"给扩展里面定义的属性字符串赋值";
   NSLog(@"定义的属性String是:%@", self.stringExtension);
}
@end

相关文章

  • OC 类别(分类)+类扩展

    适用范围 当你已经封装好了一个类(也可能是系统类、第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中...

  • UI基础知识

    分类(类别/Category)与类扩展(Extension) 一、分类(类别/Category) 1. 适用范围 ...

  • iOS-Category(分类)底层实现原理

    OC中Category(分类或者类别)应用场景 为已经存在的类添加方法。可以在不修改原来类的基础上,为一个类扩展方...

  • oc中的 分类 和 代理

    oc 中的分类 Category 类别的声明格式 @interface 类名 (类别的名字) @interfac...

  • iOS中Category的底层实现原理

    1. Category的使用场景 Category也叫分类或类别,是OC提供的一种扩展类的方式。不管是自定义的类还...

  • iOS面试题-常规概念

    简要叙述OC语言的特点 类别的作用?继承、类别和扩展在实现中有何区别? OC中类变量的@protected,@pr...

  • [iOS] 类扩展和关联对象

    本文主要是针对类的加载的扩展,探索下分类的底层实现原理。 1. 类扩展和分类介绍 1.1 category 类别、...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • 分类(categroy),类扩展(Extension)

    分类、类扩展区别 分类-运行时决议,类扩展-编译时决议,类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中...

  • iOS开发之基础篇(12)—— Category(分类)、Ext

    版本 Xcode 8.3.2 一、分类 Category这里称分类(另说类别、类目)。分类的作用:扩展已有类(包括...

网友评论

      本文标题:OC 类别(分类)+类扩展

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