1. //创建自动释放池
  2. @autoreleasepool {
  3. //autorelease会将对象放入自动释放池中,并返回该对象本身
  4. //当自动释放池销毁时,将自动调用对象的release方法
  5. Person *p = [[[Person alloc] init] autorelease];
  6. p.age = ;
  7.  
  8. NSLog(@"person is %d",p.age);
  9. }
  10. //销毁自动释放池

在Xcode5.0之前,自动释放池的创建与销毁方式如下:

  1. //创建释放池
  2. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  3.  
  4. Person *p = [[[Person alloc] init] autorelease];
  5. p.age = ;
  6.  
  7. NSLog(@"person is %d",p.age);
  8. //销毁自动释放池
  9. [pool release];

一般我们创建对象时,会使用如下方式调用autorelease:

  1. @interface Person : NSObject
  2. @property (nonatomic,assign) int age;
  3. + (instancetype)person;
  4. + (instancetype)personWithAge:(int) age;
  5. @end
  6.  
  7. @implementation Person
  8. + (instancetype)person
  9. {
  10. //此处用self,是为了方便子类如过没有重写父类此方法时
  11. //继承时获取的是子类对象而不是父类对象,否则会报错
  12. return [[[self alloc] init] autorelease];
  13. }
  14. + (instancetype)personWithAge:(int)age
  15. {
  16. //此处用self,是为了方便子类如过没有重写父类此方法时
  17. //继承时获取的是子类对象而不是父类对象,否则会报错
  18. Person *p =[[[self alloc] init] autorelease];
  19. p.age = age;
  20. return p;
  21. }
  22. @end

调用时,使用如下方式调用:

  1. //创建释放池
  2. @autoreleasepool {
  3. Person *p1 = [Person person];
  4. Person *p2 = [Person personWithAge:];
  5. }
  6. //销毁自动释放池

这样就可以将内存管理封装在对象内部,减少因代码结构复杂造成创建对象时未进行内存管理的错误,也更好的运用代码封装的原则。

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. Git提交引用和引用日志

    转载自:https://github.com/geeeeeeeeek/git-recipes/wiki/5.5-Git%E6%8F%90%E4%BA%A4%E5%BC%95%E7%94%A8%E5%9 ...

  2. jquery实现无外边框table

    jquery实现无外边框table 在需要设为无外边框的table上加上class noOutBorder <tableclass="noOutBorder"> < ...

  3. 【前端】CSS3实现弹出效果

    36氪这个网站上的登录框弹出的时候挺帅气的,想知道它是怎么做的 .. 今天通过问新爷再加上自己琢磨琢磨写出一个小小Demo - 上代码 <!DOCTYPE html> <html&g ...

  4. Codeforces182D - Common Divisors(KMP)

    题目大意 如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数 题解 如果它们有公共因子,那么显然它们的最小公共因子肯定是 ...

  5. nginx 重装添加http_ssl_module模块

    起因: 如果出现“[emerg] 10464#0: unknown directive "ssl" in /usr/local/nginx-0.6.32/conf/nginx.co ...

  6. css3水平翻转

    @keyframes cardFront { 0%, 40%, 100% { 02     opacity:1; 03     -webkit-transform:rotateY(0deg); 04 ...

  7. easyui datagrid用formtater的问题

    当value是一个字符串是直接使用value会提示value没有定义,这时需要转换下value,用""+value来替换就可以了.

  8. 理解C++中函数的返回

    连续几年的C++程序设计课教学中,学生中总有人要求为他们单独解释函数的返回(return)究竟是什么意思.各种书中都会详讲返回值的问题,而学生们掌握的难点却是在返回至何处执行.本文试图通过对一般函数及 ...

  9. Nginx代码调试——gdb工具

    参考网上的资料,写了一个configprint模块,其功能为打印输出location配置内容,并计数访问次数. 代码链接如下:https://github.com/PaulWeiHan/nginx_m ...

  10. SensorThread线程

    SensorThread  && createEventQueue http://www.csdn.com/html/itweb/20131101/200375.htm_123 htt ...