objective-c内存管理中autorelease的作用
//创建自动释放池
@autoreleasepool {
//autorelease会将对象放入自动释放池中,并返回该对象本身
//当自动释放池销毁时,将自动调用对象的release方法
Person *p = [[[Person alloc] init] autorelease];
p.age = ; NSLog(@"person is %d",p.age);
}
//销毁自动释放池
在Xcode5.0之前,自动释放池的创建与销毁方式如下:
//创建释放池
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Person *p = [[[Person alloc] init] autorelease];
p.age = ; NSLog(@"person is %d",p.age);
//销毁自动释放池
[pool release];
一般我们创建对象时,会使用如下方式调用autorelease:
@interface Person : NSObject
@property (nonatomic,assign) int age;
+ (instancetype)person;
+ (instancetype)personWithAge:(int) age;
@end @implementation Person
+ (instancetype)person
{
//此处用self,是为了方便子类如过没有重写父类此方法时
//继承时获取的是子类对象而不是父类对象,否则会报错
return [[[self alloc] init] autorelease];
}
+ (instancetype)personWithAge:(int)age
{
//此处用self,是为了方便子类如过没有重写父类此方法时
//继承时获取的是子类对象而不是父类对象,否则会报错
Person *p =[[[self alloc] init] autorelease];
p.age = age;
return p;
}
@end
调用时,使用如下方式调用:
//创建释放池
@autoreleasepool {
Person *p1 = [Person person];
Person *p2 = [Person personWithAge:];
}
//销毁自动释放池
这样就可以将内存管理封装在对象内部,减少因代码结构复杂造成创建对象时未进行内存管理的错误,也更好的运用代码封装的原则。
objective-c内存管理中autorelease的作用的更多相关文章
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...
- Redis内存管理中的LRU算法
在讨论Redis内存管理中的LRU算法之前,先简单说一下LRU算法: LRU算法:即Least Recently Used,表示最近最少使用页面置换算法.是为虚拟页式存储管理服务的,是根据页面调入内存 ...
- OC 内存管理-02 autorelease 概念 以及用法
(1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作 (2) 不管你这个对象时在@autoreleasepool 之内创建的 ...
- 【iOS系列】-autorelease的作用
内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease 1:对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对 ...
- java虚拟机内存区域的划分以及作用详解
序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...
- Objective C 内存管理[转]
1 配对原则 alloc – release new – release retain - release copy – release 2 new和alloc-init的区别 (1)区别只在于a ...
- 多项目管理中PMO的作用
随着现代企业规模的不断扩大,多项目同时运行成为了现代企业的常态,以及企业项目化进程的不断深入,大部分企业不再仅仅只运行一个项目,而且数量之大已经超出了人们的想象,如惠普公司每年有3000个左右的项目, ...
- linux内存 free命令 buffer cache作用
free命令用于查看linux内存使用情况 #free shared:用于进程之间相互共享数据. Used:已使用内存. total:内存总量. free:未使用的内存. available:开启一个 ...
- objective C 内存管理及属性方法具体解释
oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...
随机推荐
- 【HTML】Beginner1:TagsAttributesElements
HTML(Hypertext Text Mark-up Language)&(How To Make L) HTML is used for meaning and CSS is used f ...
- ARM-Linux驱动-触摸屏驱动分析
出处:http://blog.csdn.net/geekcome/article/details/6580981 硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11.04 内 ...
- NOIP2000 进制转换
题一 进制转换 (18分) 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之 ...
- Git 钩子
1. 概念概述 1.1. 安装钩子 1.2. 脚本语言 1.3. 钩子的作用域 2. 本地钩子 2.1. 预提交钩子 Pre-Commit 2.2. 准备提交信息钩子 Prepare Commit M ...
- 搭建集群必备:windows如何使用Xshell远程连接(SSH)Linux
出处about云(http://www.aboutyun.com/blog-61-22.html)欢迎访问我的博客 首先介绍一下环境: (主机)操作系统:win7 虚拟机:vmware worksta ...
- HW3.9
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- win7下wubi安装Ubuntu,重装win7后找回Ubuntu启动项
怀念一下我的win7,使用了将近5年,最近终于慢慢处于崩溃且无法修复的状态. 还是重新安装了. 原本是win7下使用wubi安装Ubuntu.重装win7后,肯定没有了Ubuntu的启动项. 具体恢复 ...
- 代码修改mysql字符
为了不再显示的时候乱码,要修改数据库默认编码.以下以GBK编码页面为例进行说明: 1.修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk2.代码运行时修改 ...
- Java实现文件的RSA和DES加密算法
根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密) 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密 ...
- Nessus漏洞扫描教程之配置Nessus
Nessus漏洞扫描教程之配置Nessus 配置Nessus 当安装成功Nessus工具后.就可以使用该工具实施漏洞扫描.为了使用户更好的使用该工具,将介绍一下该工具的相关设置.如服务的启动.软件更新 ...