0c-35-自动释放池使用注意
、autorelease使用注意 )并不是放到自动释放池中,都会自动加入到自动释放池 1.1) 因为没有调用autorelease方法,所以对象没有加入到自动释放池. int main(){
@autoreleasepool{
Student *s = [[Student alloc] init];
[s release]; // 正常释放
}
return ;
} 1.2)在自动释放池的外部发送autorelease不会被加入到自动释放池中。 int main(){
@autoreleasepool{ }
// 发送autorelease消息的对象,放到制动释放池外部
// 此时无法被自动释放
Student *s = [[[Student alloc] init] autorelease];
return ;
} 1.3)不管对象是在自动释放池里创建,还是自动释放池外创建,只要在自动释放池内写1个[s autorelease];s就会被放到自动释放池中,注意:autorelease是一个方法,且只有在自动释放池中使用才有效。
int main(){
// 不管在自动释放池内部还是外部创建
Student *s = [[Student alloc] init];
@autoreleasepool{
[s autorelease]; // 此时s加入到释放池
}
return ;
} )自动释放池的嵌套使用
自动释放池是栈结构。
栈:先进后出。后进先出,
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 第一个池子,里面创建no的1学生
Student *s = [[[Student alloc] init] autorelease];
s.no = ;
@autoreleasepool {
// 第二个池子,里面创建no2的学生
Student *s2 = [[[Student alloc] init] autorelease];
s2.no = ;
@autoreleasepool {
// 第二个池子,里面创建no3的学生
Student *s3 = [[[Student alloc] init] autorelease];
s3.no = ;
}
}
}
return ;
}
释放顺序:s3,s2,s1
)自动释放池中不适合放占用内存空间较大的对象
> 尽量避免对大内存使用该方法,对于这种延迟释放机制,尽量少用
> 不要把大量循环操作放到同1个自动释放池中,这样会造成内存峰值的上升。 、autorelease错误用法
、连续调用多次autorelease。
@autoreleasepool {
Student *s = [[[Student alloc] autorelease] autorelease];// 调用了两次autorelease,对象过度释放。
} 、对象创建在释放池外,但是在释放池内进行autorelease后,在释放池外,又进行了release。
int main(int argc, const char * argv[]) {
Student *s = [[Student alloc] init];
@autoreleasepool {
[s autorelease];// 此时出池子后,对象可以被释放
}
[s release];// 对象被释放后再次调用释放,会出错。
return ;
} 、alloc之后调用了autorelease,之后又调用release。
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *s = [[[Student alloc] init] autorelease];
[s release];
}
return ;
} 、alloc之后调用release。 int main(int argc, const char * argv[]) { @autoreleasepool {
// 因为release没有返回值,所以这样调用是错误的。
Student *s = [[[Student alloc] init] release];
} return ;
}
0c-35-自动释放池使用注意的更多相关文章
- OC中对象元素的引用计数 自动释放池的相关概念
OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc] view plaincopy 1. // 2. / ...
- Autorelease自动释放池的使用
Autorelease自动释放池的使用 使用ARC开发,只是在编译时,编译器会根据代码结构自动添加了retain.release和autorelease. MRC内存管理原则:谁申请,谁释放 遇到al ...
- OC 内存泄露 自动释放池
花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...
- autoreleasepool自动释放池
示例: @autoreleasepool { ; i[largeNumber; i++) { (因识别问题,该行代码中尖括号改为方括号代替) Person *per = [[Person alloc ...
- OC之property和自动释放池
property实例 property参数 自动释放池 一.property实例 1.前边的例子我们看到,我们在一个类中如果用到另外一个类的实例作为自己的成员变量时,通常需要在setter方法中,先r ...
- OC12_自动释放池
// // Dog.h // OC12_自动释放池 // // Created by zhangxueming on 15/6/18. // Copyright (c) 2015年 zhangxuem ...
- OC11_自动释放池
// // Dog.h // OC11_自动释放池 // // Created by zhangxueming on 15/6/18. // Copyright (c) 2015年 zhangxuem ...
- Objective c 自动释放池
学IOS 的大家都知道,IOS 一共有三种内存管理方式:MRC .ARC.自动释放池.我按照我个人的理解简述一下自动释放池,希望能给大家一点帮助,如有错误请大家及时批评指正. 自动释放池有几个特点:1 ...
- 04-OC属性的使用、自动释放池、封装和继承
目录: 一.IOS6声明式属性的使用 二.autoreleasepool自动释放池 三.封装.继承 回到顶部 一.IOS6声明式属性的使用 注:声明式属性默认情况下,并没有解决内存问题, 当使用@pr ...
- iOS 之 自动释放池
向一个对象发送autorelease消息时,cocoa会将该对象的一个引用放入最新的自动释放池.作用域结束时,自动释放池会被释放,池中所有的对象也就被释放了.
随机推荐
- Mac下用命令行直接批量转换文本编码到UTF8
由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ...
- ajax 第一个程序
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- mysql-python模块编译问题解决
解决方法:yum -y install mysql-devel libxml2 libxml2-dev libxslt* zlib gcc openssl [root@localhost MySQL- ...
- SharePoint咨询师之路:备份和恢复系列--制定备份计划
本来想研究下如何做数据库服务器的集群,然而突然被同事问起如何在部署SharePoint服务场的时候做备份和恢复的计划,就先来复习和研究一下. 本系列包括: 备份服务器场和配置 备份web和服务应用程序 ...
- Java并发编程:Java ConcurrentModificationException异常原因和解决方法
Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...
- Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)
Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...
- Struts2数据校验方法
方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupp ...
- MSSQL手札二 MSSQL的触发器
触发器,就是在对表做DML操作的时候,触发一些其他的事件,触发器一般用在check约束更加复杂的约束上面,是一种特殊的存储过程,不可以被主动调用. 语法如下: CREATE TRIGGER trigg ...
- 随笔2 PAT1001.A+B Format (20)
1001.A+B Format(20) 题目链接 1001.A+B Format (20) C++ 代码 第一次使用markdown,还不是很习惯,现在努力的在适应它 首先这道题我们很容易就可以读懂题 ...
- CCF 201312-1 出现次数最多的数 (水题)
问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数. 输入的第二行有n ...