`
yangli
  • 浏览: 62349 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

objective-c 笔记3:内存管理

 
阅读更多

引用计数

概念:每个对象有一个与之相关联的整数,称作它的引用计数器保留计数器

方法:

retain:对象的引用计数器加1.

release:对象的引用计数器减1.

dealloc:释放对象。

autorelease: 自动释放。

 

规则:

1.当使用new、alloc、copy方法创建一个对象时(拥有对象),该对象的引用计数器值为1.当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象再其使用寿命结束时被销毁。

销毁方法:dealloc

eg:

 

-(void) doStuff
{
 flonkArray = [NSMutableArray new];// count:1

}

-(void) dealloc
{
 [flonkArray release];// count:0
 [super dealloc];
}
 

 

2.当你通过任何其他方法获得一个对象时(临时对象),则假设该对象的保留计数器值为1,而且已经设置为自动释放,你不需要执行任何操作来确保该对象被清理。如果打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。

eg:arrayWithCapacity 方法,不需要关心如何销毁该对象。

 

-(void) doStuff
{
  flonkArray = [NSMutableArray arraywithCapacity:17];//临时对象
  //count:1  是autoreleased
  [flonkArray retain];// count:2, 1:是autorelease
 
}

-(void) dealloc
{
 [flonkArray release];// count:0 (本来是2个计数器,但是有一个计数器为autorelease)
 [super dealloc];
}
 

 

 

3.如果你保留了某个对象,你需要释放或自动释放该对象。必须报纸retain方法河release方法的使用次数相等。

 

 

清理自动释放池:

 

NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
int i;
for(i=0;i<100000000;i++)
{
id object = [someArray objectAtIndex:i];
NSString *desc = [object descrption];

if(i % 1000 == 0)
[pool release];
pool = [[NSAutoreleasePool alloc] init];

}

[pool release];
 

 

垃圾回收:

Objective-c 2.0   引入了自动内存管理机制,也称作垃圾回收。

启用垃圾回收非常简单,只是一种可供选择的功能。选项:“-fobjc-gc”

在对象实例变量使用结束时,一定要赋值为:nil,以取消对该对象的引用并使垃圾回收器知道该对象可以被清理了。

注意:开发iPhone软件不能使用垃圾回收。建议不要在自己的代码中使用autorelease,同时还要避免使用创建自动释放对象的便利函数。

 

 

 

分享到:
评论

相关推荐

    Objective-C&UIKit自学笔记

    在Objective-C中,内存管理是非常关键的概念。`malloc`用于动态分配内存,`alloc`和`init`一起用于创建对象,`init`方法用来初始化对象的成员变量。`release`用于释放不再使用的对象,`autorelease`则会在特定时间点...

    Objective-c学习笔记

    Objective-C是一种基于C语言的面向对象编程语言,它是苹果公司Mac OS X和iOS操作系统的主要开发语言。Objective-C的特性使其成为构建Cocoa框架应用程序的理想选择。以下是对Objective-C关键概念的详细解释: 1. **...

    objective-c学习笔记

    1. Foundation框架:提供了Objective-C的基本数据类型、集合类(NSArray, NSDictionary等)、内存管理等基础功能。 2. UIKit框架:是iOS应用开发的核心框架,包含了创建用户界面、处理事件、动画等关键组件。 四、...

    objective-c编程入门学习笔记

    Objective-C中,内存管理非常重要,通常通过引用计数机制来实现。`@autoreleasepool`是一种常用的内存管理方式,它可以帮助开发者管理临时对象的生命周期。 #### 六、综合案例分析 为了更好地理解Objective-C的基本...

    Objective-C 学习笔记

    总的来说,Objective-C作为iOS开发的重要语言,其面向对象的特性、与C语言的兼容性以及强大的Cocoa框架,使得开发者能够构建功能丰富的iOS应用程序。学习Objective-C的基础知识和面向对象编程概念对于理解iOS开发至...

    Objective-C学习资料(内置学习笔记,各内容源码)

    7. **ARC(Automatic Reference Counting)**:自动引用计数是Objective-C的内存管理机制,它自动跟踪并释放不再使用的对象,减轻了程序员的负担。 8. **GCD(Grand Central Dispatch)**:GCD是Apple提供的多线程...

    Objective-C基础教程第二版

    **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管Swift已经成为苹果官方推荐的新一代编程语言,但Objective-C仍然拥有大量的代码库和丰富...

    objective-c的总结

    接下来,我们要了解Objective-C中的内存管理。在早期的iOS开发中,主要使用手动引用计数(MRC),开发者需要手动调用`retain`、`release`和`autorelease`来管理内存。后来,Apple引入了垃圾回收(GC),但在iOS上并...

    Objective-C

    7. 内存管理:Objective-C使用引用计数(ARC,Automatic Reference Counting)系统来自动管理内存。当对象的引用计数变为零时,系统会自动释放该对象。 8. KVC(Key-Value Coding)与KVO(Key-Value Observing):...

    Object-C语言教程0220.zip基础知识及相关案例

    此外,还可能涉及内存管理,比如ARC(Automatic Reference Counting)的使用,这是Objective-C的一个重要特性,用于自动管理对象的生命周期。 在学习Objective-C的过程中,掌握类的定义和对象的创建是基础,理解...

    Objective-C的入门学习笔记

    Objective-C 是苹果平台下开发 iOS 和 macOS 应用的主要编程语言之一,虽然 Swift 已经成为新宠,但Objective-C 的重要性仍然不可忽视,尤其是因为许多现有的类库和框架仍由 Objective-C 编写。以下是一份关于...

    资源是object-c介绍,同时展现示意demo源码,供大家参考学习

    6. **内存管理**:Objective-C使用引用计数(Reference Counting)来管理内存,后来引入了ARC(Automatic Reference Counting),自动处理大部分内存问题。 7. ** Blocks 和 GCD**:Blocks是Objective-C中的匿名函数...

    Objective-C-Learning

    9. **垃圾回收(Garbage Collection)**:虽然现代的Objective-C开发更多使用ARC(Automatic Reference Counting),但了解垃圾回收机制对理解内存管理仍然有价值。 10. **Xcode IDE**:苹果提供的集成开发环境,...

    object-c学习笔记

    这篇学习笔记主要涉及了Objective-C的基础知识,包括对象创建、类的结构、文件导入、实例变量、接口与实现、内存管理和属性。 1. **对象创建**: - `string`方法创建的字符串对象是自动释放的,意味着系统会在适当...

    Object-C语言教程0220.zip

    Objective-C(简称Obj-C或Objective-C)是苹果公司基于C语言构建的一种面向对象的编程语言,广泛应用于iOS和Mac OS X操作系统。本教程将深入探讨Object-C的基础概念、语法特性以及实际开发中的应用,旨在帮助初学者...

    Object-C 学习笔记

    1. **引用计数(Reference Counting)**:早期的Objective-C使用引用计数进行内存管理,当对象的引用计数变为0时,对象会被自动释放。 2. **ARC(Automatic Reference Counting)**:自iOS 5和Mac OS X Lion引入,...

    iphone开发学习笔记(1)--NSLog

    注意,Objective-C使用引用计数内存管理,因此在创建对象后,如果不再使用,需要手动释放内存。在上述代码的末尾,`[test release]`是用来释放`test`对象的内存。 在Xcode中,你可以通过快捷键`Command + Shift + R...

    JSPatch学习笔记-UI进阶

    在iOS开发中,JSPatch是一个非常重要的工具,它允许开发者在运行时动态地用JavaScript修改Objective-C代码,极大地提升了开发效率和灵活性。本篇学习笔记将深入探讨如何利用JSPatch在UI层面进行高级操作,特别是与...

    OC学习笔记合集

    3. 内存区域:Objective-C有堆(Heap)和栈(Stack)两种内存区域,对象通常存储在堆中,基本数据类型存储在栈上。 三、Block(闭包) Block是Objective-C中的匿名函数,它可以捕获并存储其所在上下文的变量,常...

Global site tag (gtag.js) - Google Analytics