8 OC加强02
来源:互联网 发布:access 软件开发步骤 编辑:程序博客网 时间:2024/06/05 03:46
8 OC加强02
@class关键字
作用:
1. 防止循环引入(你作为我的属性,我作为你的属性)
本质:告诉编译器这是一个类,编译器不关心具体的实现.在.m文件中再引入对方的头文件.
循环retain
在MRC内存管理体制中,当两个对象相互引用时,都进行retain时,会发生内存泄露,都无法回收.
解决办法:一遍用retain,一端用assign(因为直接赋值dealloc中不用release).
自动释放池
` @autoreleasepool{ } `
储存在自动释放池中的对象在自动释放池被销毁时,向里面的全部对象发送* 一条release消息 *
如何将对象加入自动释放池中?
在你想要在这个自动释放池中释放此对象,调用[p1 autorelease];方法
注意:
1. 对象可在池外面创建,在池内调用释放.
2. 只发送一条release消息
3. 调用几次autorelease方法,销毁时就发送几次release消息,这时可能会发生僵尸对象错误,不要这么写.写一次就可以了.
autorelease使用规范:类方法返回的对象在类方法中创建对象时,要求对象已经被autorelease了(不用在mian内手动调用autorelease),创建就已经被添加在释放池中了.
MRC结束
ARC机制(自动引用计数)
ARC机制:永远不要写retain,release,retainCount,autorelease.
可以重写delloc但是方法内不能调用[super dealloc];系统都帮我们解决了这些代码,我们不能写.
ARC下@property中的weak和strong参数.
只要没有强指针指向这个对象,这个对象就会被释放.
__strong ZLPerson *p1 = [ZLPerson new]; __weak ZLPerson *p2 = [ZLPerson new]; //弱指针出现就被释放
强弱都可以操作对象.
区别:ARC机制下,回收对象的基准不同.
- ARC机制下@property参数retain不能写(MRC机制下使用:生成set方法是标准的MRC内存管理代码),但assign可用(表示非对象)
ARC下的循环引用
属性内都是强指针指向对方,就算申明的强指针都被释放了,他们对象内部的指针变量不会被释放.
解决办法:一个用strong,一个用weak.
知识点补充:一个对象只剩下弱指针指向,对象会被释放,这个弱指针会自动设置为nil.
MRC与ARC兼容
-fno-objc-arc
- 8 OC加强02
- OC加强笔记2
- OC加强3
- OC加强-Foudation
- 7 OC加强01
- 9 OC加强03
- oc加强day01作业答案
- 黑马程序员-OC加强-Block
- 黑马程序员--学习OC加强内存管理
- 黑马程序员----oc加强笔记----内存管理
- 黑马程序员----oc加强笔记----分类(Gategory)
- 黑马程序员----oc加强笔记----Foundation\NSString
- 黑马程序员----oc加强笔记----block
- 黑马程序员-OC加强回顾-内存管理
- 黑马程序员-OC加强-内存管理
- OC加强DAY01 - 内存管理MRC
- OC加强DAY02 - ARC与分类
- OC加强Day03 - block与协议
- MySQL 慢查询日志
- 获取JAVA[WEB]项目相关路径的几种方法
- 弟子规
- 第八周项目5 计数的模式匹配
- Java反射详解
- 8 OC加强02
- 第八周项目5 计数的模式匹配
- 转 【Android 应用开发】GitHub 优秀的 Android 开源项目
- 不带头结点的单链表代码实现
- 封装缓动动画函数
- 搭建视频直播服务_nginx+rtmp模块
- redis中各种数据类型对应的jedis操作命令
- Java解析excel
- C语言的fopen函数(文件操作/读写)