关于iOS 类扩展Extension的进一步深层理解

很多人可能会问  iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识;但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻。

这里就讲一下我自己的理解,但是这个理解也是集合了前辈的经验来的,只不过我用大白文再延伸一点。

对于类扩展,先看这段话:

我们定义类时,在.h里写的变量如果不是public一般不能被外部直接调用,如果我有的方法不想被外部调用只给内部使用呢?至此,延展出现。

其实,延展就是类似于“定义私有方法”的一种子类。

对于如何创建:

通过New File  -> Objective-C extension来创建,比如我选择ASStudent类,延展名叫hello,那么会自动创建一个.h文件叫ASStudent_hello.h,

没有.m文件,因为可以直接在类的.m里写即可。

其实,对于只有.h文件这点,很多新人可能就比较疑惑,只有一个头文件,怎么和分类不一样?

这正是扩展的不一样,它会创建多一个头文件,我们在里面添加成员变量、属性、方法等;如果要实现,只需要在它要扩展的类  .m文件去实现即可。

有时候,我们网上查的资料,对于扩展介绍说很常见,我们可能会比较迷糊,不理解啊。。。

其实原理是这样:

a:其实我们可以不通过创建文件来创建延展,可以直接在.m文件里写@interface和@implementation,

注意这两个都要写在.m文件里,因为如果把@interface写在.h里,那么里面的方法都是public的;
b:此外,我们也可以直接省略@interface,直接在.m文件里写方法即可,但还是建议书写,这样的好处是至少阅读起来,可以在文件一开始的几行就告知了哪些是私有方法。

这正好解释了,为什么大神会说扩展其实无处不在了。

理解的浅薄,如有不对,欢迎留言。。

时间: 2024-10-22 21:52:54

关于iOS 类扩展Extension的进一步深层理解的相关文章

iOS - 类扩展与分类的区别

类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明 一般的类扩展写到.m文件中 一般的私有属性写到类扩展 使用格式: @interface Mitchell() //属性 //方法 @end 与分类的区别 分类的小括号中必须有名字 @interface 类名(分类名字) /*方法声明*/ @end @implementation类名(分类名字) /*方法实现*/ @end 分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会

【IOS类扩展之日期操作】NSDate+Helpers

import "Date.h" @implementation NSDate(Helpers) //获取年月日如:19871127. - (NSString *)getFormatYearMonthDay { NSString *string = [NSString stringWithFormat:@"%d%02d%02d",[self getYear],[self getMonth],[self getDay]]; return string; } //该日期是

iOS 8新特性之扩展(Extension)

本文由海水的味道收集整理,欢迎转载 当前版本 0.0.1  iOS 8新特性之扩展 一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app之间的数据交互成为可能.用户可以在app中使用其他应用提供的功能,而无需离开当前的应用. 在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据. 而在引入扩展之后,其他app可以与扩展进行数据交换.基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundle, b

IOS中 类扩展 xib

IOS中 类扩展 xib 一.类扩展(class extension,匿名分类) 1.格式 @interface 类名 () { // 成员变量... } // 方法声明... @end 2.作用 1> 写在.m文件中 2> 一般用来扩充私有成员变量.@property属性.方法等 二.随机数生成 1.arc4random() 会生成任意正整数和0 2.arc4random_uniform(100) 会生成0~99的整数(包括0和99) 三.UIView常见方法 1.addSubview:(U

iOS类别Category与扩展Extension

本文主要是详解iOS类别(Category)与扩展(Extension,匿名类别),请登陆疯狂软件教育官网.Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. [objc] view plaincopy在CODE上查看代码片派生到我的代码片 #import @interface NSObject (Category) - (void)myMethod; @end 这是一个

【iOS】Swift中扩展extension与协议protocol

一起连带前面几篇Playground小结代码都转到github上了,注释写了很多,主要方便自己以后可以翻翻看.Swift语法主要部分差不多就这些了.当然还有泛型.运算符重载.ARC.闭包之类的补充. 一.扩展(extension) 扩展 extension(类似OC中的分类,但Swift中没有名字), 即使在没有权限获取到原始代码的情况下,为类增加新功能. 注意: 只要定义了扩展, 那么该扩展对该类的实例都是可用的. extension SomeType{ //添加到SomeType的新功能写在

类目 (category),扩展(Extension)和协议(protocol) (转)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式2.类目的局限性:1)类目无法向已有的类中添加实例变量: 2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来. 3.类目的作用:?       将类的实现分散到多个不同的文件中–      将多个类目的声明放入同一个.h文件中–      将实现放入多个.m方法中?       使

类扩展(Class Extension)

1.什么是类扩展 延展类别又称为扩展(Extendsion),Extension是Category的一个特例 可以为某个类扩充一些私有的成员变量和方法 写在.m文件中 英文名是Class Extension 2.类扩展书写格式 @interface 类名 () @end 对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”

分类(类别/Category)与 类扩展(Extension)

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