类扩展 (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
文/Mitchell(简书作者)
原文链接:http://www.jianshu.com/p/18d48e7f2aad
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS - 类扩展与分类的区别的更多相关文章

  1. 关于iOS 类扩展Extension的进一步理解

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

  2. 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别

    1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...

  3. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  4. iOS中的分类(category)和类扩展(extension)

    今天在研究swift的时候看到了分类和扩展.这是两个十分重要有用的功能,但是之前用的不多,没有深入了解过,在今天就从头理一遍. 一.分类(Category): 概念: 分类(Category)是OC中 ...

  5. iOS分类(category),类扩展(extension)—史上最全攻略

    背景: 在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢? 最简单粗暴的方式是把newMethod ...

  6. 类目(category) - 类扩展(extension) 区别

    说明: 方法,属性或变量:   类别只能添加方法,不能添加属性(理论上,但可以通过runtime的关联添加). 扩展可以添加方法和实例变量或属性,实例变量默认@private类型.扩展是类别的一个特例 ...

  7. OC-ARC,类扩展,block

    总结 标号 主题 内容 一 autorelease autorelease基本概念/自动释放池/autorelease基本使用 二 autorelease注意事项 注意点/应用场景 三 ARC 什么是 ...

  8. 类扩展(Class Extension)

    类扩展(Class Extension) 也有人称为匿名分类 - 作用     - 能为某个类增加额外的属性.成员变量.方法声明     - 一般将类扩展写到.m文件中     - 一般将一些私有的属 ...

  9. IOS中 类扩展 xib

    一.类扩展(class extension,匿名分类) .格式 @interface 类名 () { // 成员变量... } // 方法声明... @end .作用 > 写在.m文件中 > ...

随机推荐

  1. Java学习【1】

    一.Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. 2005年6月,SUN公司公开Java SE 6.Java ...

  2. web图片识别

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  3. Lua源代码阅读分析问题列表(转)

    最近正在阅读lua源码,遇到座灯塔,转载如下: 我个人的习惯是带着问题去研究一个新题目,比如这次阅读Lua代码,暂列下面这些问题. 1)什么是基于栈.基于寄存器的虚拟机(VM)设计?Lua如何实现基于 ...

  4. 后台post get请求

    /// <summary> /// 执行HTTP POST请求. /// </summary> /// <param name="url">请求 ...

  5. eayui datagrid 分页 排序 详解

    最近因为经常使用easyui 在做表格时难免后出现排序 及分页的问题,但是 在官网中没有 相关的介绍及例子,所以经过多方面的查找后,终于完成了分页 和排序的功能 首先 页面datagrid 要排序的必 ...

  6. HTML的两三事

    关于在页面布局上,我用了两种方式  用&nbsp来调整需要空格的地方,  用<pre></pre>直接在代码页面调整页面布局  但是用&nbsp来布局当我把网页 ...

  7. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读的层面上,很少有实践,因为没有遇到真实的项目,一切都是纸上谈兵.实践是检验 ...

  8. 剑指Offer面试题:22.二叉搜索树的后序遍历序列

    一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...

  9. 修改Hosts为何不生效,是DNS缓存?

    Update: 如果浏览器使用了代理工具,修改 Hosts 也不会生效.这里是因为,浏览器会优先考虑代理工具(如添加 pac 文件.SwitchySharp等)的代理,建议调试的时候先关闭这些代理. ...

  10. 多彩的Console打印新玩法

    Chrome应该是每一个Web开发者必备的工具之一.它有而强大的Devtool,辅助我们的JavaScript调试,审视DOM元素,CSS即时修改等.以及它还有一个的庞大的插件系统,同时我们也可以很容 ...