iOS 扩展与分类的区别
1、分类 category
- 分类的作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法
- 分类也能使用@property 添加属性 【通过runtime 关联对象实现】 需要手动写变量的setter和getter方法,否则添加的成员变量无法使用。因为在分类中不会生成setter和getter方法,也不会生成以及实现私有的成员变量 如果直接访问其成员变量 程序会报错
- 分类头文件中实现的方法必须在m文件中实现 不然会报错
- 如果分类中有和原有类同名的方法,会优先调用分类中的方法,就是说会忽略原有类的方法。所以同名方法调用的优先级为:分类>本类>父类
- 如果两个分类中包含了同一个方法、 后编译的代码会优先调用build phases 中能控制顺序 【编译时分类方法会合并到方法列表中、根据源码所知、后编译的方法会优先调用】
- 分类是在运行时添加到类中
2、扩展 extension
- 类扩展不仅可以增加方法,还可以增加实例变量(或者属性)
- 扩展是在编译阶段被添加到类中
- 扩展是依赖于宿主文件、宿主中只要引入类扩展 该宿主文件就可以使用扩展中的属性和方法了
- 原则上扩展只对当前类有用、如果是一个父类.m中倒入了扩展 那子类也能使用、但是父类不倒入 、子类直接倒入会报错
iOS 扩展与分类的区别的更多相关文章
- iOS - 类扩展与分类的区别
类扩展 (Class Extension也有人称为匿名分类) 作用: 能为某个类附加额外的属性,成员变量,方法声明 一般的类扩展写到.m文件中 一般的私有属性写到类扩展 使用格式: @interfac ...
- iOS中的分类(category)和类扩展(extension)
今天在研究swift的时候看到了分类和扩展.这是两个十分重要有用的功能,但是之前用的不多,没有深入了解过,在今天就从头理一遍. 一.分类(Category): 概念: 分类(Category)是OC中 ...
- iOS中的分类和扩展
一.什么是分类? 概念:分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体指针.根据下面源码组成可以看到它没有属性列表,原则上是不能添加成员变量(其实可以借助运行时功能,进行关联 ...
- iOS仿京东分类菜单之UICollectionView内容
在上<iOS仿京东分类菜单实例实现>已经实现了大部分主体的功能,本文是针对右边集合列表进行修改扩展,使它达到分组的效果,本文涉及到的主要是UICollectionView的知识内容,左边列 ...
- 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol
关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...
- ios标准开发者账号 ios企业开发者账号的区别总结
ios标准开发者账号 ios企业开发者账号的区别总结 ios标准开发者项目 1.ios标准开发者项目账号可以发布到app store 2.ios标准开发者项目分为两种:①个人开发者②公司/机构开发 ...
- php扩展memcache和memcached区别?以及memcached软件的介绍
引用“http://www.vicenteforever.com/2012/03/memcache-different-memcached/” memcached是一个软件,而PHP包括了memcac ...
- iOS exit(),abort(),assert()函数区别
iOS exit(),abort(),assert()函数区别 exit() 退出程序 abort() 停止程序, assert()检查里面的参数如果为nil抛出异常:
- OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏
//再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用. 类的扩展:为类添加新的特征(属性)或者方法 对已知类: 1.直接添加 2.继承(在其子类中添加实例变量和方法) 3.使用ext ...
- .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别
新增了一个分类,叫做 Personals,中文我把它解释成 "个人恶趣味",这里将记载一些对工作无关紧要,但是个人又一时有兴趣了解的东西. 今天要讲的是如题的 4 种扩展文件的区别 ...
随机推荐
- 删除启动台(LaunchPad)残留的图标
忘记什么版本的时候以前在 "应用程序" 删除应用后,启动台自动更新删掉 不知道什么时候开始,直接在 "应用程序" 里删掉后,启动台居然不能删除了-- 10.13 ...
- iPhone添加节假日日历地址
添加苹果节假日日历地址 手动订阅节假日: 打开"设置">"日历">"帐户">"添加帐户">&qu ...
- python 对接各大数据库,快速上手!
1.mysql 安装pymysql pip intsall pymysql 快速上手 import pymysql # 第一步:连接到数据库 con = pymysql.connect(host= ...
- apollo兼容mysql的时候报错Table 'apolloportaldb.hibernate_sequence' doesn't exist
解决方案: 配置文件里加: spring.jpa.properties.hibernate.hbm2ddl.auto=update
- [Err] [Dtf] 1044 - Access denied for user 'root'@'localhost' to database 'information_schema'
在从Oracle向mysql数据库传输数据时,报出来这个错误,原因是因为没有打开mysql数据库,在navicat里打开mysql,并选中要传输的数据库 再重复传输一下即可
- Log4net使用探究
第一步: 通过Nuget package 搜索Apache Log4net安装 第二步: 在项目Global.asax文件中添加读取 配置文件 第三步: 编写Loghelper 文件 1 public ...
- ubuntu配置docker全局系统代理
(1)添加用户到docker用户组 sudo groupadd docker sudo gpasswd -a kang docker (注销系统当前用户,再次登录) #检查是否添加到组 cat /et ...
- 路飞项目 day03 前端配置、后台主页、项目依赖问题
一.路飞项目前端配置 1.先删除一些不要的 删除多余的组件,只要app和首页组件 然后改一下组件的内部代码 -App.vue中 ______________ <template> ...
- c++文件中,头文件与实现文件该写什么内容
1. 参考https://www.cnblogs.com/fenghuan/p/4794514.html
- (0319) SV 中的 iff 事件控制
https://blog.csdn.net/yinyeyy/article/details/111086864