`
wuce7758
  • 浏览: 181551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • YTT1121: 有网络拓扑发现的源代码么?能不能发我一份学习一下,现在我正要做 ...
    java拓扑图
  • YTT1121: 大神,有网络拓扑发现的源代码么?或者您会编写么?我需要做科研改 ...
    java拓扑图
  • YTT1121: 大神,有网络拓扑发现的源代码么?或者您会编写么?我需要做科研改 ...
    java拓扑图
  • poettang: 求代码分享学习,谢谢!膜拜大神!258026921@qq.co ...
    java拓扑图
  • oiqio: 87836238@qq.com,感谢楼主,来一份~
    java拓扑图

iPhone开发中内存的合理使用

阅读更多

iPhone 开发过程中,内存的使用至关重要。不但要合理分配使用内存,还要注意内存泄露的问题, 因为内存泄露会导致程序由于内存不足而崩溃。根据个人开发的经验来看,在开发iPhone程序的过程中,关于内存的问题需要注意以下几点:

  1. 内存分配、释放成对出现
    使用 alloc 分配的内存对象需要在用完后 调用release释放
  2. 注意copy,retain,assign操作符的区别
    copy, retain操作符赋值的对象和alloc一样,需要release释放,否则会导致内存泄露
    assign 操作符的含义是将对象指向另一对象, 两者指向的是同一内存对象,无需调用release释放
  3.  

  4. NSArray, NSDictionary, NSMutableArray, NSMutableDictionary等容器类, 在使用这些容器类的时候要注意, 在添加对象到这些类对象时,容器类会自动调用一次retain,比如
    NSString* string  = [[NSString alloc] initWithString:@”test string”];  // refCount = 1
    NSArray* array = [NSArray array];
    [array addObject:string]; // refCount = 2
    [string release]; // refCount = 1

    这种情况, 即便string已经调用release,但是在加入 array中时已经调用了一次retain,注意refCount的变化

    简单介绍一下iPhone 或者说Objective C对对象的管理机制。 OC中采用一种引用计数refCount的方式来管理内存对象,当refCount等于0的时候就会释放对象所占的内存, 操作符alloc,copy, retain都会将refCount加1表示引用计数增加, 而调用release使 refCount自动减1, 当refCount=0时表示该对象已经没有被引用,可以将其释放, 之后该对象便不可用

  5. 连续重复分配内存的过程最好创建自己的自动释放池 NSAutoreleasePool,通常是在for、while等循环操作过程中,比如
    for( int i=0; i < 100; i++ )
    {
    NSString* str = [[NSString alloc] initWithString:@”some string”];
    // 针对str的操作
    [str release];
    }

    在这种情况下,有2点需要注意,首先如果可能,就把str的分配、释放放在for循环外面, 从而减少内存的分配、释放导致程序效率低下,也利于内存回收,如上例应该为
    NSString* str = [[NSString alloc] initWithString:@”some string”];
    for( int i=0; i < 100; i++ )
    {
    // 针对str的操作
    }
    [str release];

    如果实际情况复杂,不能像例子中那样抽离出循环外,需要创建自己的内存管理池, 同样适用于需要大量autorelease对象的过程
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    for(int i=0; i < 100; i++ )
    {
    // actions
    }
    [pool release];

    之所以要这样做,是因为apple处理iPhone的内存管理机制问题, 通常情况下,系统会在需要的时候释放整理所有的autorelease对象,这就是为什么有时候autorelease对象在作用域范围外还有可能是有效的
  6. 避免不常用对象驻留内存, 桌面开发的tx很多喜欢在程序初始化的时候将某些资源比如小图片加载进内存,从而提高程序运行效率。 但这种方式在iPhone以及其它mobile移动设备开发时需要避免,因为对于这些设备来说,内存永远显得不足(当然普通pc内存也是越大越好:) )。 按照apple的官方说法, Load resources lazily . 就是在需要的时候再从硬盘上读取,而避免常驻内存。
分享到:
评论
1 楼 mackcyl 2011-08-11  
, Iphone开发中, 内存管理很重要 ~ 收藏起来, 备用 ~

相关推荐

    IPhone中文开发文档

    以上概述了《IPhone中文开发文档》中提到的关键知识点,这些知识点覆盖了从Objective-C语言的基础到高级的Cocoa框架技术,对于希望从事iPhone开发的人来说是一份非常宝贵的资源。通过对这些内容的学习,开发者不仅...

    iphone开发xml解析

    常见的做法是使用字典或数组来组织数据,以便后续在应用中使用。 #### 示例代码解析 在提供的代码片段中,可以看到具体的解析逻辑实现。例如,当遇到`&lt;item&gt;`元素时,会创建一个新的字典来存储该条目的数据,并将...

    谢伟-基于iPhone开发实践 pdf

    例如,在Android应用中使用类似的架构和技术,可以提升应用的质量和用户体验。 综上所述,《谢伟-基于iPhone开发实践》PDF不仅涵盖了iPhone开发的基本知识和技术要点,还深入探讨了移动应用开发中的常见问题及其...

    基础iphone开发资料

    ### 基础iPhone开发资料知识点汇总 #### SDK(Software Developer Kit)介绍 SDK 是苹果提供的用于开发 iPhone 应用程序的一系列工具集合。通过这些工具,开发者可以编写、调试和发布自己的应用到 App Store 或者...

    iphone上面实现播放视频文件,自己开发的播放器

    6. **内存管理与性能优化**:考虑到移动设备的资源限制,播放过程中需要合理管理内存,避免内存泄漏,并优化播放性能,确保流畅播放。 7. **处理错误与状态监控**:通过监听AVPlayerItem的错误通知和状态变化,可以...

    知易Cocco2D-iPhone开发教程(all).zip

    Cocos2D-iPhone提供了一些工具和技巧来监控和优化游戏性能,如使用Z轴排序减少渲染开销,以及合理利用缓存和内存管理。同时,开发者还需要了解多线程编程,以便在后台加载资源或执行计算任务,而不会阻塞主线程导致...

    iPhone游戏开发实践指南.

    由于所提供的【部分内容】中重复的网址信息较多,且无实质性内容,因此这里重点对标题“iPhone游戏开发实践指南”和【描述】中提及的iPhone游戏开发相关知识点进行详细说明。 ### 知识点概述: #### 1. iPhone与...

    iphone开发例子

    这个“iPhone开发例子”提供了一个实际的项目,用于模拟原生iPhone的用户界面设计和交互。在这个示例中,开发者将学习到如何利用苹果的Swift编程语言和Xcode集成开发环境来创建具有真实感的iPhone应用。 1. **Swift...

    iphone平台开发

    - **内存管理**:内存管理是iOS开发中的一个关键问题。由于移动设备的内存资源有限,因此合理地管理内存是非常必要的。在Swift中,ARC(Automatic Reference Counting)机制大大简化了内存管理的工作,但在某些情况...

    iPhone开发必备

    - **内存管理**:合理地管理内存使用,避免内存泄漏和过度占用。 - **响应式设计**:确保应用能够在不同设备和分辨率下正常显示。 - **加载时间**:减少启动时间和页面加载时间,提升用户体验。 ##### 2. 安全性 - ...

    Cocco2D-iPhone开发教程part04

    在本"Cocco2D-iPhone开发教程part04"中,我们将深入探讨Cocos2D-iPhone这个强大的2D游戏开发框架。Cocos2D-iPhone是基于Objective-C的,它为iOS平台提供了丰富的功能,使得开发者能够创建出高质量、高性能的2D游戏和...

    苹果iPhone iPad开发书籍

    《学习iPhone与iPad Cocos2D游戏开发》是一本针对iOS平台游戏开发者的专业指南,不仅涵盖了Cocos2D框架的基本使用方法,还深入讲解了游戏设计、编码实现等方面的知识。通过阅读本书,开发者可以系统地掌握使用Cocos...

    iphone开发游戏的声音文件

    本文将深入探讨如何在iPhone游戏中集成和管理声音文件,以实现标题所示的“iphone开发游戏的声音文件”这一目标。 首先,我们要了解iOS支持的声音格式。在提供的压缩包文件中,我们可以看到`background-music-aac....

    iPhone与iPad开发实战——精通iOS开发2.rar

    合理使用ARC(Automatic Reference Counting)可以有效地管理内存,避免内存泄漏。另外,了解GCD(Grand Central Dispatch)和操作队列可以帮助你实现多线程编程,提高应用的响应速度。 最后,测试和发布也是iOS...

    iphone中线程的使用

    综上所述,iPhone中线程的使用涉及到多线程技术的选择、线程安全的保障以及合理利用GCD进行任务调度。熟练掌握这些知识点,对于编写高效、稳定的iOS应用至关重要。通过实际操作和实践,你可以更好地理解和运用这些...

    iPhone人机界面开发指南

    ### iPhone人机界面开发指南:构建卓越的用户体验 #### 引言 《iPhone人机界面开发指南》旨在为开发者提供全面、深入的理解,以便在iPhoneOS平台上构建既美观又实用的应用程序。本指南覆盖了从产品定义到最终设计...

    知易Cocos2D-iPhone游戏开发教程

    通过这个全面的教程,你将不仅学会使用Cocos2D-iPhone开发游戏,还会掌握游戏设计的基本原则和最佳实践。不论你是游戏开发新手还是有经验的开发者,都能从中受益匪浅,开启你的Cocos2D-iPhone游戏开发之旅。

Global site tag (gtag.js) - Google Analytics