iOS之深入解析分类Category的底层原理
一、Category 简介
- Objective-C 中的 Category 是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。
- 分类 Category 可以拓展类的属性、方法、协议等信息。
- 把一个类拆分成多个模块,如下,需要把 Person 类分成 A 和 B 模块,则分为 Person+A 和 Person+B 模块,这就用到 Category:
- 根据苹果官方文档对 Category 的描述,它的使用场景主要有三个:
- 给现有的类添加方法;
- 将一个类的实现拆分成多个独立的源文件;
- 声明私有的方法。
- 其中,第一个是最典型的使用场景,应用最广泛。
- 使用分类需要注意:
- 分类是用于给原有类添加方法的,因为分类的结构体指针中,没有属性列表,所以原则上讲他只能添加方法,不能添加属性(成员变量),实际上他是可以通过其他方式来添加属性,比如 runtime。但是使用 runtime 也只能实现 setter 和 getter 方法,而没有_成员变量,如果调用_成员变量,程序还是会报错。
- 如果要使用
iOS之深入解析分类Category的底层原理相关推荐
- iOS之深入解析weak关键字的底层原理
一.weak 关键字 在 iOS 开发过程中,会经常使用到一个修饰词 weak,使用场景大家都比较清晰,避免出现对象之间的强强引用而造成对象不能被正常释放最终导致内存泄露的问题. weak 关键字的作 ...
- iOS之深入解析对象isa的底层原理
对象本质 一.NSObject 本质 OC代码的底层实现实质是 C/C++代码 ,继而编译成汇编代码,最终变成机器语言. ① clang C/C++ 编译器 Clang 是⼀个 C 语⾔.C++.Ob ...
- iOS之深入解析内存对齐的底层原理
CPU 存取原理 一."存"示例 CPU 并不是以字节为单位存取数据的.CPU 把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此 CPU 在读取内存时是一块一块 ...
- iOS之深入解析通知NSNotification的底层原理
一.概念 ① NSNotification NSNotification 用于描述通知的类,一个 NSNotification 对象就包含了一条通知的信息,NSNotification 对象是不可变的 ...
- iOS之深入解析数组遍历的底层原理和性能分析
一.OC 数组的类体系 当我们创建一个 NSArray 对象时,实际上得到的是 NSArray 的子类 __NSArrayI 对象.同样的,创建 NSMutableArray 对象,得到的同样是其子类 ...
- iOS之深入解析缓存方法cache_t底层原理
一.cache_t 原理 Class 内部中有个方法 缓存 cache_t ,用 散列表 来缓存调用过的方法,可以提高访问方法的速度. struct cache_t {#if CACHE_MASK_S ...
- iOS之深入解析类Class的底层原理
内存偏移 定义一个数组并打印数组中的元素地址: int a[4] = {1,2,3,4};int *b = a;NSLog(@"%p - %p -
- iOS之深入解析高阶容器的原理和应用
一.前言 我们都知道 iOS 提供了三种主要的容器类型,它们分别是 Array.Set 和 Dictionary,用来存储一组值: Array:存储一组有序的值: Set:存储一组无序的.不重复的值: ...
- iOS之深入解析Xcode编译运行的原理与应用
一.前言 编程语言可以分为两种,编译语言和直译式语言: 编译语言(Compiled language)是一种编程语言类型,通过编译器来实现.它不像解释型语言一样,由解释器将代码一句一句运行,而是以编译 ...
最新文章
- Python使用SMTP发送邮件
- 海外web平台访问速度慢的原因之一
- python---memcache使用操作
- bootstrap大图轮播手机端不能手指滑动解决办法
- 程序人生:硬件工程师应记住的10个技巧
- c# winform中窗体切换后释放及防止重复生成
- mysql binlog 断点续传_mysql5.6 binlog实时异地备份之我见犹怜
- 帮你轻松理解Commonjs、AMD、CMD、ES6的区别
- 中源幼儿园收费管理系统 v5.2.8 是什么
- 基于iTextSharp(C#)创建PDF文件
- 华为公司“22个不”
- WinRAR制作单文件(便携版)
- Maven Helper
- 网络拓扑学习之SLB
- luci编程 openwrt_openWRT之Luci简介
- 3分钟带你了解,软件测试是做什么的!
- 解决删除Volume报错的问题(二)
- win10系统开始菜单点不出来的有效修复方案
- jquery表单ajax json数据,jquery序列化form表单使用ajax提交后处理返回的json数据
- 我的世界服务器怎么设置自动拾取,我的世界自动拾取mod
热门文章
- 修改mac的hosts文件
- 写存储过程与调用存储过程
- 无网情况下linux安装django
- [转]LESS CSS 框架简介
- Windows服务的创建、安装、调试
- 买空long position、卖空short position
- 1.7-27编程基础之字符串 单词翻转
- java代码走读,WebRTCDemo.apk代码走读(一):初始化
- java ueditor 图片上传加水印_Ueditor编辑器上传图片加水印【亲测可用】-帝国CMS整合...
- Java黑皮书课后题第10章:**10.28(实现StringBuilder类)在Java库中提供了StringBuilder类。给出你对下面方法的实现(将新类命名为MyStringBuilder2)