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 |
相关推荐
1. **手动引用计数**(Manual Retain Count, MRC):这是早期版本的OC使用的内存管理模式,开发者需要显式地调用`retain`、`release`或`autorelease`方法来增加或减少对象的引用计数,从而控制对象的生命周期。...
在Objective-C(简称OC)编程语言中,内存管理是一个至关重要的概念,因为它直接影响到程序的稳定性和性能。OC主要采用了两种内存管理策略:手动引用计数(MRC)和自动引用计数(ARC)。这两种机制都是为了确保在...
Objective-C(OC)内存管理是管理内存的一种方式,主要通过引用计数(retain count)来手动控制对象的生命周期。OC的内存管理机制有别于.Net和Java中的全自动垃圾回收机制,它允许开发者更细致地控制内存使用,但也...
### OC内存管理详解 #### 引用计数和对象所有权的基本概念 在Objective-C中,内存管理主要通过引用计数机制来实现。每个对象都有一个引用计数,当对象被创建时,其引用计数初始化为1。通过发送`retain`消息,可以...
### OC(完整)内存管理文档知识点总结 #### 一、对象的所有权与处理 ##### 1.1 对象所有权原则 - **对象所有权概念**:任何对象都可以有多个所有者,只要至少有一个所有者存在,该对象就会持续存在。若没有所有者...
Objective-C的内存管理是一种重要的编程技能,它对于创建出色的应用程序至关重要。在深入探讨Objective-C内存管理之前,让我们以日常生活中的比喻来形象说明内存管理的过程:当我们在家中自己做饭时,需要亲自处理...
4. **内存管理** - Autorelease Pool:自动释放池的概念和工作原理,以及如何正确处理内存分配和释放。 - ARC(Automatic Reference Counting):OC的自动引用计数,减少了手动内存管理的复杂性。 5. **Objective...
自动释放池(Autorelease Pool)是OC内存管理机制的一部分,它帮助开发者有效地管理内存,尤其是在循环中创建大量临时对象时。理解并正确使用自动释放池对于避免内存泄漏和优化性能至关重要。 自动释放池的基本概念...
### iOS内存管理核心知识点 #### 一、前言与背景 在探讨iOS内存管理之前,有必要理解为何这一主题如此重要。对于从C++或Java转向Objective-C(简称OC)的开发者来说,OC语言的特性显得既独特又挑战性十足。与Java...
9. **内存管理**:OC使用引用计数进行内存管理,我们需要了解`retain`、`release`和`autorelease`等概念,防止内存泄漏。 10. **异常处理**:在进行数据库操作或其他可能出错的地方,应使用`@try`、`@catch`、`@...
2. **内存管理(Memory Management)**: Objective-C使用引用计数(Reference Counting)来管理内存,后来引入了ARC(Automatic Reference Counting),使得内存管理更加自动化。在源码中,可以研究`retain`、`...
内存管理在iOS应用开发中扮演着至关重要的角色,特别是在Objective-C这种动态语言中。Objective-C高级编程中的内存管理主要涉及自动引用计数(ARC)和手动引用计数(MRC)。多线程则是iOS开发中提升用户体验的关键...
- **assign:**适用于基本数据类型(如int、float等),不需要内存管理。 #### 3. 展示setter方法实现 - **@property(nonatomic,retain) NSString *name;** 的setter方法: ```objective-c -(void)setName:...
10. **内存管理**:Objective-C采用自动引用计数(Autorelease Pool)和ARC(Auto Reference Counting)来管理内存,防止内存泄漏。 总的来说,《OC植物大战僵尸》项目展示了Objective-C在游戏开发中的广泛应用,开发者...
二、内存管理 1. 自动引用计数(ARC):Objective-C引入了自动引用计数,编译器会自动管理对象的生命周期,通过`strong`、`weak`、`unowned`等属性控制引用关系。 2. 手动引用计数(MRC):在没有ARC的年代,...
3. **内存管理**:OC使用引用计数进行内存管理,笔记会讲解`retain`、`release`、`autorelease`等关键字的使用,以及ARC(Automatic Reference Counting)自动引用计数的原理和实践。 4. **类别与分类**:OC允许对...
OC使用引用计数(Reference Counting)进行内存管理,通过`retain`、`release`、`autorelease`来控制对象生命周期。理解ARC(Automatic Reference Counting)的工作原理也很重要,它简化了手动内存管理。 7. **...
- **ARC (Automatic Reference Counting)**:自动引用计数是 iOS 5 及以后版本默认的内存管理策略,可以自动处理对象的生命周期。 - **强引用与弱引用**:`strong` 表示强引用,`weak` 表示弱引用,避免循环引用...