`
JavaZhuang
  • 浏览: 10289 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

4 7.OC13-内存管理4-autorelease

    博客分类:
  • IOS
 
阅读更多

4 7.OC13-内存管理4-autorelease

 

 

自动释放池(autorelease  pool

1)、自动释放池是OC里面的一种内存自动回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收释放。

2)、当自动释放池销毁时,池里面的所有对象都会调用一次release方法。

 

autorelease

1)OC对象只需要发送一条autorelease消息,就会把这个对象添加到最近的自动释放池中(栈顶的释放池)

2)autorelease实际上只是把对release的调用延迟了,对于每一次autorelease,系统只是把该对象放入了当前的autorelease  pool中,当该pool被释放时,该pool中的所有对象会被调用release

 

使用autorelease

以前

Book  *book = [[Book  alloc] init];

[student  setBook:book];

[book  release];

 

现在:

Book  *book = [ [[Book  alloc]  init]   autorelease];

[student  setBook:book];

//不要在调用[book  release];

 

 

autorelease  pool疑问

1)、在iphone项目中,main()中有一个默认的Autorelease  Pool,程序开始时创建,程序退时销毁,按照对Autorelease的理解,岂不是Autorelease  Pool里的所有对象在程序退出时才release,这样跟内存泄露有什么区别?

2)、对于每一个Runloop,系统会隐式创建一个Autorelease  pool,并且把创建好的pool放在栈顶,所有的pool会构成一个栈式结构。在每一个Runloop结束时,当前栈顶的pool会被销毁,这样这个pool里的每个对象会执行release操作。

 

 

 

 

例一:

main.m

 //

//  main.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-9.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import "Student.h"

 

 

int main(int argc, const char * argv[])

{

    //@@autoreleasepool代表创建一个自动的释放池

    @autoreleasepool {

        Student *stu = [[[Student alloc] init] autorelease];

        

        Student *stu1 = [[[Student alloc] init] autorelease];

    

        //这个str是自动释放的,不需要释放

        Student *stu2 = [Student student];

        

        //这个str是自动释放的,不需要释放

        NSString *str = [NSString stringWithFormat:@"age is %i", 10];

    }

    return 0;

}

 

 

Student.h

 //

//  Student.h

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-9.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

 

+ (id)student;

 

@end

 

 

Student.m

 //

//  Student.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-9.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import "Student.h"

 

@implementation Student

 

- (void)dealloc{

    NSLog(@"%@被销毁", self);

    [super dealloc];

}

 

+ (id)student{

    Student *stu = [[[Student alloc] init] autorelease];

}

 

@end

 

 

分享到:
评论

相关推荐

    OC 中的内存管理

    1. **手动引用计数**(Manual Retain Count, MRC):这是早期版本的OC使用的内存管理模式,开发者需要显式地调用`retain`、`release`或`autorelease`方法来增加或减少对象的引用计数,从而控制对象的生命周期。...

    OC中的内存管理

    在Objective-C(简称OC)编程语言中,内存管理是一个至关重要的概念,因为它直接影响到程序的稳定性和性能。OC主要采用了两种内存管理策略:手动引用计数(MRC)和自动引用计数(ARC)。这两种机制都是为了确保在...

    oc内存管理.

    Objective-C(OC)内存管理是管理内存的一种方式,主要通过引用计数(retain count)来手动控制对象的生命周期。OC的内存管理机制有别于.Net和Java中的全自动垃圾回收机制,它允许开发者更细致地控制内存使用,但也...

    OC内存管理详解

    ### OC内存管理详解 #### 引用计数和对象所有权的基本概念 在Objective-C中,内存管理主要通过引用计数机制来实现。每个对象都有一个引用计数,当对象被创建时,其引用计数初始化为1。通过发送`retain`消息,可以...

    OC(完整)内存管理文档(中文)

    ### OC(完整)内存管理文档知识点总结 #### 一、对象的所有权与处理 ##### 1.1 对象所有权原则 - **对象所有权概念**:任何对象都可以有多个所有者,只要至少有一个所有者存在,该对象就会持续存在。若没有所有者...

    《深入浅出发Objective-C》 内存管理.pdf

    Objective-C的内存管理是一种重要的编程技能,它对于创建出色的应用程序至关重要。在深入探讨Objective-C内存管理之前,让我们以日常生活中的比喻来形象说明内存管理的过程:当我们在家中自己做饭时,需要亲自处理...

    oc疯狂讲义

    4. **内存管理** - Autorelease Pool:自动释放池的概念和工作原理,以及如何正确处理内存分配和释放。 - ARC(Automatic Reference Counting):OC的自动引用计数,减少了手动内存管理的复杂性。 5. **Objective...

    OC-自动释放池的使用

    自动释放池(Autorelease Pool)是OC内存管理机制的一部分,它帮助开发者有效地管理内存,尤其是在循环中创建大量临时对象时。理解并正确使用自动释放池对于避免内存泄漏和优化性能至关重要。 自动释放池的基本概念...

    小议iOS内存管理-中文.pdf

    ### iOS内存管理核心知识点 #### 一、前言与背景 在探讨iOS内存管理之前,有必要理解为何这一主题如此重要。对于从C++或Java转向Objective-C(简称OC)的开发者来说,OC语言的特性显得既独特又挑战性十足。与Java...

    基于OC语言的学生管理系统(实现了增删查改功能)

    9. **内存管理**:OC使用引用计数进行内存管理,我们需要了解`retain`、`release`和`autorelease`等概念,防止内存泄漏。 10. **异常处理**:在进行数据库操作或其他可能出错的地方,应使用`@try`、`@catch`、`@...

    objc4-818.2.zip

    2. **内存管理(Memory Management)**: Objective-C使用引用计数(Reference Counting)来管理内存,后来引入了ARC(Automatic Reference Counting),使得内存管理更加自动化。在源码中,可以研究`retain`、`...

    内存管理资料.zip

    内存管理在iOS应用开发中扮演着至关重要的角色,特别是在Objective-C这种动态语言中。Objective-C高级编程中的内存管理主要涉及自动引用计数(ARC)和手动引用计数(MRC)。多线程则是iOS开发中提升用户体验的关键...

    iOS面试题-OC部分

    - **assign:**适用于基本数据类型(如int、float等),不需要内存管理。 #### 3. 展示setter方法实现 - **@property(nonatomic,retain) NSString *name;** 的setter方法: ```objective-c -(void)setName:...

    OC植物大战僵尸

    10. **内存管理**:Objective-C采用自动引用计数(Autorelease Pool)和ARC(Auto Reference Counting)来管理内存,防止内存泄漏。 总的来说,《OC植物大战僵尸》项目展示了Objective-C在游戏开发中的广泛应用,开发者...

    OC学习笔记合集

    二、内存管理 1. 自动引用计数(ARC):Objective-C引入了自动引用计数,编译器会自动管理对象的生命周期,通过`strong`、`weak`、`unowned`等属性控制引用关系。 2. 手动引用计数(MRC):在没有ARC的年代,...

    iOS史上最全的OC笔记

    3. **内存管理**:OC使用引用计数进行内存管理,笔记会讲解`retain`、`release`、`autorelease`等关键字的使用,以及ARC(Automatic Reference Counting)自动引用计数的原理和实践。 4. **类别与分类**:OC允许对...

    OC学习总结资料

    OC使用引用计数(Reference Counting)进行内存管理,通过`retain`、`release`、`autorelease`来控制对象生命周期。理解ARC(Automatic Reference Counting)的工作原理也很重要,它简化了手动内存管理。 7. **...

    Objective-C基础教程源码

    - **ARC (Automatic Reference Counting)**:自动引用计数是 iOS 5 及以后版本默认的内存管理策略,可以自动处理对象的生命周期。 - **强引用与弱引用**:`strong` 表示强引用,`weak` 表示弱引用,避免循环引用...

Global site tag (gtag.js) - Google Analytics