iOS - 类扩展与分类的区别
类扩展 (Class Extension也有人称为匿名分类)
- 作用:
- 能为某个类附加额外的属性,成员变量,方法声明
- 一般的类扩展写到.m文件中
- 一般的私有属性写到类扩展
- 使用格式:
@interface Mitchell()
//属性
//方法
@end 与分类的区别
分类的小括号中必须有名字
@interface 类名(分类名字)
/*方法声明*/
@end
@implementation类名(分类名字)
/*方法实现*/
@end- 分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会直接报错)。
- 如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现。
- 举例说明:如果我们分别在,类扩展与分类中添加了两个属性,
类扩展与类别1.1.png
接下来在初始化方法中分别赋值,
类扩展与类别1.1.png大家会看到在为在分类中所声明的属性textOne赋值的时候,崩溃了,那么我们来查看一下崩溃的原因:
类扩展与类别1.3.png意思是说,我们所创建的对象中并没有textOne这个属性。也就是说虽然我们再类别中声明属性不会报错,
但是@property并没有自动为我们设置的属性生成set、get方法
。
- 再说一下我们为什么不能包含类的 .m文件,因为这样会重复包含另一个类的实现文件。
使用运行时的代码如下:
@interface QKYCrmMyCustomerController (mcCate)
@property (nonatomic,copy)NSString *myselfStr;
@end @implementation QKYCrmMyCustomerController (mcCate) static NSString *const myStr; - (void)setMyselfStr:(NSString *)myselfStr
{
objc_setAssociatedObject(self, &myStr, myselfStr, OBJC_ASSOCIATION_COPY);
} - (NSString *)myselfStr
{
return objc_getAssociatedObject(self, &myStr);
}
@end
原文链接:http://www.jianshu.com/p/18d48e7f2aad
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
iOS - 类扩展与分类的区别的更多相关文章
- 关于iOS 类扩展Extension的进一步理解
很多人可能会问 iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识:但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻. 这里就讲一下我自己的理解,但是这个 ...
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...
- OC分类(类目/类别) 和 类扩展 - 全解析
OC分类(类目/类别) 和 类扩展 - 全解析 具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...
- iOS中的分类(category)和类扩展(extension)
今天在研究swift的时候看到了分类和扩展.这是两个十分重要有用的功能,但是之前用的不多,没有深入了解过,在今天就从头理一遍. 一.分类(Category): 概念: 分类(Category)是OC中 ...
- iOS分类(category),类扩展(extension)—史上最全攻略
背景: 在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢? 最简单粗暴的方式是把newMethod ...
- 类目(category) - 类扩展(extension) 区别
说明: 方法,属性或变量: 类别只能添加方法,不能添加属性(理论上,但可以通过runtime的关联添加). 扩展可以添加方法和实例变量或属性,实例变量默认@private类型.扩展是类别的一个特例 ...
- OC-ARC,类扩展,block
总结 标号 主题 内容 一 autorelease autorelease基本概念/自动释放池/autorelease基本使用 二 autorelease注意事项 注意点/应用场景 三 ARC 什么是 ...
- 类扩展(Class Extension)
类扩展(Class Extension) 也有人称为匿名分类 - 作用 - 能为某个类增加额外的属性.成员变量.方法声明 - 一般将类扩展写到.m文件中 - 一般将一些私有的属 ...
- IOS中 类扩展 xib
一.类扩展(class extension,匿名分类) .格式 @interface 类名 () { // 成员变量... } // 方法声明... @end .作用 > 写在.m文件中 > ...
随机推荐
- c#List移除列表中的元素
对于一个List<T>对象来说移除其中的元素是常用的功能.自己总结了一下,列出自己所知的几种方法. class Program { static void Main(string[] ar ...
- HTML5将图片转化成字符画
HTML5将图片转化成字符画 字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能.其实原理很简单:扫描图片相应位置 ...
- nfs配置注意点
#ip与括号之间不能有空格,不加rw参数时挂载的目录是只读的 /eqp/export/ 10.10.30.0/24(rw,sync,no_root_squash) #更改目录所属的组和所属的用户(nf ...
- Python之路第一课Day6--随堂笔记(面向对象 )
本节内容: 1. 面向对象编程介绍 2. 为什么要用面向对象进行开发? 3. 面向对象的特性:封装.继承.多态 4. 类.方法 一.面向过程 VS 面向对象 1. 编程范式 编程是 程序 员 用 ...
- JQuery的父、子、兄弟节点查找方法
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- Swift库运行崩溃
报错如下: 解决方法: 退出 Xcode 找到 DerivedData 文件夹 删除 (路径: ~/Library/Developer/Xcode/DerivedData) 删除 com.apple. ...
- mac远程桌面连接windows 8.1 update,提示: 远程桌面连接无法验证您希望连接的计算机的身份
在网上找到解决方案: SolutionEnable RDP security layer in Group Policy on the machine: Verify that the firewal ...
- SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager
SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager http://www.systoolsgroup.co ...
- Excel导入导出组件的设计
前言: 距离一篇文章,又八九个月过去了,随着在园子露脸的次数越来越少,正如我们淡忘上一波大神那样,我们也正下一波所淡忘. 这八九个月,前前后,游走在十来个项目上,忙,却找不到成就感. 人过30后,也是 ...
- Microsoft开源跨平台的序列化库——Bond
上个月Microsoft开源了Bond,一个跨平台的模式化数据处理框架.Bond支持跨语言的序列化/反序列化,支持强大的泛型机制能够对数据进行有效地处理.该框架在Microsoft公司内部的高扩展服务 ...