博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - 类扩展与分类的区别
阅读量:4958 次
发布时间:2019-06-12

本文共 1095 字,大约阅读时间需要 3 分钟。

类扩展 (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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/machao/p/5485059.html

你可能感兴趣的文章
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
ubuntu12.04 串口登录系统配置
查看>>
poj3061
查看>>
linux--多进程进行文件拷贝
查看>>
笔记:git基本操作
查看>>
Gold Smith第一章
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
URL中的特殊字符处理
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>