关于iOS 类扩展Extension的进一步理解
很多人可能会问 iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识;但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻。
这里就讲一下我自己的理解,但是这个理解也是集合了前辈的经验来的,只不过我用大白文再延伸一点。
对于类扩展,先看下面的概念:
能为某个类附加额外的属性,成员变量,方法声明
一般的类扩展写到.m文件中
一般的私有属性写到类扩展
使用格式:
@interface Mitchell()
//属性
//方法
@end
与分类的区别:
分类的小括号中必须有名字 @interface 类名(分类名字)
/*方法声明*/
@end
@implementation类名(分类名字)
/*方法实现*/
@end
分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会直接报错,runtime实现除外)。
如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现(不会生成成员变量)。
那么,如何创建一个扩展呢:
通过New File -> Objective-C extension来创建,比如我选择ASStudent类,延展名叫hello,那么会自动创建一个.h文件叫ASStudent_hello.h, 没有.m文件,因为可以直接在类的.m里写即可。(这个也正是和分类的不同,分类会有.h 和 .m)
其实,对于只有.h文件这点,有些人可能就比较疑惑,只有一个头文件,怎么和分类不一样?
这正是扩展的不一样,它只会创建一个头文件,我们在里面可以添加成员变量、属性、方法等;如果要实现,只需要在它要扩展的类 .m文件去实现即可。
其实可以理解成原有类多了一个.h文件,但写在这个头文件里面的属性、方法等,都是私有的,只能被这个类所拥有访问。
到这里,大家有没有觉得和一种场景很熟悉?
对了,就是 .m文件里的定义属性,有时我们不会在.h里写属性,因为那样会变成public,只要import后,外部都可以访问。
如果我们只想当前类用一下,只需要写在.m里面,这样的属性或方法其实也是扩展的一种特殊情况啦。。。
摘自网上的一段话:
a:我们可以不通过创建文件来创建延展,可以直接在.m文件里写@interface和@implementation, 注意这两个都要写在.m文件里,因为如果把@interface写在.h里,那么里面的方法都是public的;
b:此外,我们也可以直接省略@interface,直接在.m文件里写方法即可,但还是建议书写@interface,这样的好处是可阅读性强,可以在文件一开始的几行就告知了哪些是私有方法。
这正好解释了,为什么大神会说扩展其实无处不在了。
理解的浅薄,如有不对,欢迎留言。。
关于iOS 类扩展Extension的进一步理解的更多相关文章
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...
- iOS分类(category),类扩展(extension)—史上最全攻略
背景: 在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢? 最简单粗暴的方式是把newMethod ...
- 类目(category) - 类扩展(extension) 区别
说明: 方法,属性或变量: 类别只能添加方法,不能添加属性(理论上,但可以通过runtime的关联添加). 扩展可以添加方法和实例变量或属性,实例变量默认@private类型.扩展是类别的一个特例 ...
- iOS - 类扩展与分类的区别
类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明 一般的类扩展写到.m文件中 一般的私有属性写到类扩展 使用格式: @interfac ...
- 类扩展Extension
延展(Extension):在本类里声明私有方法. 1:延展定义的方法是在implemetation中. 2:声明的方法是私有方法. 3:延展中声明的方法可以不实现. #import "Ho ...
- iOS开发之NSRunLoop的进一步理解
http://www.cnblogs.com/pengyingh/articles/2343920.html iPhone应用开发中关于NSRunLoop的概述是本文要介绍的内容,NSRunLoop是 ...
- iOS中 分类(category)与扩展(Extension)的区别?
1.分类(category)的作用 (1).作用:可以在不修改原来类的基础上,为一个类扩展方法.(2).最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? (1).分类中只能添加“方法”,不 ...
- OC分类(类目/类别) 和 类扩展 - 全解析
OC分类(类目/类别) 和 类扩展 - 全解析 具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...
- iOS中的分类(category)和类扩展(extension)
今天在研究swift的时候看到了分类和扩展.这是两个十分重要有用的功能,但是之前用的不多,没有深入了解过,在今天就从头理一遍. 一.分类(Category): 概念: 分类(Category)是OC中 ...
随机推荐
- jQuery元素属性attr设置多个键值或函数 删除属性removeAttr
$("Element").attr(name) '取得第一个匹配的属性值,比如$("img").attr("src") $("El ...
- 仿LOL项目开发第九天
仿LOL项目开发第九天 by 草帽 OK,今天我们完全换了一种风格,抛弃了Unity3d的c#语法,我们来写写java的项目. 说到java服务器,当然有些人可能鄙视java的服务器速度太慢,但是相对 ...
- 仿LOL项目开发第七天
仿LOL项目开发第七天 by 草帽 不知不觉已经写到了第七篇这种类型的博客,但是回过头看看之前写的,发现都只能我自己能看懂. 我相信在看的童鞋云里雾里的,因为我基本上没怎么详细讲一个脚本怎么用?但是你 ...
- Java开发环境搭建详解
一.jdk安装与配置 jdk7于3月份刚刚发布,目前eclipse的最新版本中还没有提供对jdk7的编译支持,所以我们只下载jdk6. 下载地址:http://download.java.net/jd ...
- Reverse Nodes in k-Group leetcode java
题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...
- JSON学习资料整理
1.什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...
- vue组件级路由钩子函数介绍,及实际应用
正如其名,vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消. 有多种方式可以在路由导航发生时执行钩子:全局的.单个路由独享的.或者组件级的. 一.全局钩子 你可以使用 rout ...
- Windows 8.1 64位版本安装.Net Framework3.5
最近刚把个人电脑切换成了Win 8.1 64位版本,但在使用某些Ms的某此产品时会提示没有安装.Net Framework3.5,但按照他的提示需要在线安装而且速度很慢,因为之前搞过WinServer ...
- POJ2762 Going from u to v or from v to u? 强连通+缩点
题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足 随意两点ab 都能 从a到达b 或 从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...
- SpringBoot四大神器之Starter
SpringBoot的starter主要用来简化依赖用的.本文主要分两部分,一部分是列出一些starter的依赖,另一部分是教你自己写一个starter. 部分starters的依赖 Starter( ...