OC-分类与释放池
来源:互联网 发布:mysql清空表数据 编辑:程序博客网 时间:2024/05/22 21:46
分类
1) 分类,在不改变原来模型的情况下,可以给某个类扩充一些方法
2) 分类只能增加方法,不能增加成员变量
3)分类方法实现中可以访问原来类中声明的成员变量
4)分类的优先级最高,方法优先去分类中去找,再去原来类中去找,最后再去父类中找
5)分类可以重写原来类中的方法,但是会覆盖掉,会导致原来的方法失效,没法再使用
6)方法调用的优先级:分类(最后参与编译的分类优先) –> 原来类 –> 父类
7)分类的应用一般是扩展系统的类的方法,比如扩展NSString类的方法
主要解决的问题是:在一个类中方法太多,所以通过将方法模块化以后可以解决方法集中在一个文件中产生的凌乱的问题。
分析:OC中分类这个概念有点像Java的抽象概念,但是又不完全一样,因为分类是在原有接口(interface)中将相关的方法归门别类,这样做的好处有几点:
1)方便程序员理解程序框架、查看和了解方法所处在的位置
2)便于扩展现有类的方法,不需要访问类的源代码,也无需创建子类
3)和一般的接口不同,不必实现分类中的所有方法
分类的注意点:
1、不能定义自身的任何变量
代码演示:
释放池
什么是自动释放池
1、Autorelease pool
自动释放池(Autorelease pool)是OC的一种内存自动回收机制,可以将一些临时变量通过自动释放池来回收统一释放。自动释放池本身销毁的时候,池子里面所有的对象都会做一次release操作
2、autorelease
任何OC对象只要调用autorelease方法,就会把该对象放到离自己最近的自动释放池中(栈顶的释放池)。
创建一个自动释放池
@autoreleasepool { }
自动释放池的销毁时间
当我们将一个对象发送了autorelease消息时,当自动释放池销毁时,会对池中的每一个对象发送一 条release消息,以此来进行释放它们。
自动释放池的数据结构 :
自动释放池是以栈的形式实现,当你创建一个新的自动释放池,它将会被添加到栈顶。接受autorelease
消息的对象将会被放入栈顶
如何持有对象 :
当我们使用alloc,copy,对象获取一个对象时,我们需要负责显示的安排对象的销毁,其他方法获取的对
象将交给自动释放池进行释放(单例模式除外)
- OC-分类与释放池
- OC加强day2-自动释放池、指针分类、ARC、分类、延展、block
- OC与Category 分类
- oc 分类与协议
- OC手动内存管理-自动释放池的销毁时机与工作过程
- OC手动内存管理-临时对象与事件循环中的自动释放池
- OC学习笔记之autorelease与自动释放池
- OC-内存-自动释放池
- OC-7-释放池,指针
- oc构造方法与分类
- OC手动内存管理-使用自动释放池
- oc学习之旅:自动释放池
- oc内存管理 ---自动释放池
- OC 自动释放池学习笔记
- OC-自动释放池、多态、协议
- OC中的分类与类扩展
- 黑马程序员 oc随机 分类与延展
- OC学习Runtime之协议与分类
- Html加载网页的方式
- IOS多张图片合成一个视频
- 代理服务器Tengine的研究与测试
- js eval() 解释json数据
- 代理服务器Tengine的研究与测试
- OC-分类与释放池
- 修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 问题
- 使用SOCKET实现TCP/IP协议的通讯
- 虚拟机linux的ip和dns设置 【仅供参考】
- Java 初始化顺序
- VLFeat和Piotr’s Image & Video Matlab Toolbox
- mysql bat脚本控制
- android 屏蔽电源键,home键
- jquery中的方法