//创建自动释放池
@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的作用的更多相关文章

  1. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease   Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的A ...

  2. Redis内存管理中的LRU算法

    在讨论Redis内存管理中的LRU算法之前,先简单说一下LRU算法: LRU算法:即Least Recently Used,表示最近最少使用页面置换算法.是为虚拟页式存储管理服务的,是根据页面调入内存 ...

  3. OC 内存管理-02 autorelease 概念 以及用法

    (1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作 (2) 不管你这个对象时在@autoreleasepool 之内创建的 ...

  4. 【iOS系列】-autorelease的作用

    内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease   1:对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对 ...

  5. java虚拟机内存区域的划分以及作用详解

    序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...

  6. Objective C 内存管理[转]

    1  配对原则 alloc – release new – release retain - release copy – release 2  new和alloc-init的区别 (1)区别只在于a ...

  7. 多项目管理中PMO的作用

    随着现代企业规模的不断扩大,多项目同时运行成为了现代企业的常态,以及企业项目化进程的不断深入,大部分企业不再仅仅只运行一个项目,而且数量之大已经超出了人们的想象,如惠普公司每年有3000个左右的项目, ...

  8. linux内存 free命令 buffer cache作用

    free命令用于查看linux内存使用情况 #free shared:用于进程之间相互共享数据. Used:已使用内存. total:内存总量. free:未使用的内存. available:开启一个 ...

  9. objective C 内存管理及属性方法具体解释

    oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...

随机推荐

  1. CentOS下恢复Firefox的复制等功能

    在CentOS下使用firefox编辑博客时,我发现无法使用复制粘帖功能,可用如下两种方法恢复(方法一已验证可行): 方法一: 找到user.js所在的目录,Linux下的user.js所在目录为Un ...

  2. HW4.42

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  3. 北京Uber优步司机奖励政策(2月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. [置顶] 自己写sqlhelper类

    自己写sqlhelper类 using System; using System.Collections.Generic; using System.Configuration; using Syst ...

  5. 视频播放(iOS开发)

    视频播放 一.视频播放介绍(5种实现方案) AVPlayer 优点 可以自定义UI,进行控制 缺点 单纯的播放,没有控制UI,而且如果要显示播放界面,需要借助AVPlayerLayer,添加图层到需要 ...

  6. MSSQLSERVER数据库- 游标

    游标是属于级行操作,遍历一个表一行一行读,而SQL查询是基于数据集的,在数据量大的时候,使用游标会降低查询速度.这是很明显的.但是有些操作就用游标实现.所以游标又是不或缺少的.我很久都没用游标了,一时 ...

  7. 关于学习汇编的一些规则的理解(div mul cf of)

    ->1.div(除法)  被除数/除数 ->一共有三种格式的除法,分别是8位,16位,32位,这里的位数表示的是除数的位数 ->实现div其实也很简单就是除数为被除数的一半就ok - ...

  8. 关于no system images installed for this target解决方法

    (1)国外网站都被屏蔽,连不上下载地址了 修改hosts文件(C:\Windows\System32\drivers\etc\hosts),在最后添加如下内容 127.0.0.1 localhost ...

  9. systemtap 列出所有linux 内核模块与相关函数1

    阿里云主机 [root@monitor klvl]# uname -aLinux monitor 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20: ...

  10. 系统调用服务号 linux 2.6.32

    http://www.cnblogs.com/xcywt/p/4998963.html 系统定义符号集中声明在 /usr/src/kernels/linux-2.6.32/include/linux/ ...