`

ARC内存使用注意事项

    博客分类:
  • ios
阅读更多


 官方介绍:

https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/ManagingMemory.html#//apple_ref/doc/uid/10000160-SW1

 

整个项目开启关闭ARC,需要在Building Setting中设置: 

 

某个文件关闭ARC,只需对该文件设置:-fno-objc-arc

 

ARC机制基本规则:
delegate使用方法:@property (assign) <id>xxxDelegate delegate;
delegate和outlet 应该用 weak 属性来声明

在ARC机制下,彻底忘掉retain、release、retainCount和autorelease。以前我们在需要安全使用一个对象时,往往会将该对象retain住,在不需要的时候进行release。在ARC环境下这么做会有编译错误。

在@property声明中,用strong和weak代替相应的retain, copy,和assign。

 

int, BOOL用assign修饰
__weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil

 

使用ARC的一些强制规定:

  1. 不能直接调用dealloc方法,不能调用retain,release,autorelease,retainCount方法,包括@selector(retain)的方式也不行
  2. 可以用dealloc方法来管理一些资源,但不能用来释放实例变量,也不能在dealloc方法里面去掉[super dealloc]方法,在ARC下父类的dealloc同样由编译器来自动完成
  3. Core Foundation类型的对象仍然可以用CFRetain,CFRelease这些方法
  4. 不能再使用NSAllocateObject和NSDeallocateObject对象
  5. 不能在C结构体中使用对象指针,如果由类似功能可以创建一个Objective-C类来管理这些对象
  6. 在id和void*之间没有简便的转换方法,同样在Objective-C和core Foundation类型之间的转换都需要使用编译器制定的转换函数
  7. 不能再使用NSAutoreleasePool对象,ARC提供了@autoreleasepool块来代替它,这样更有效率
  8. 不能使用内存存储区(不能再使用NSZone)
  9. 不能以new为开头给一个属性命名
  10. 声明outlet时一般应当使用weak,除了对StoryBoard这样nib中间的顶层对象要用strong
  11. weak相当于老版本的assign,strong相当于retain

 

 

老版本的工程是可以转换成使用ARC的工程的,转换规则包括:

 

  1. 去掉所有的retain,release,autorelease 
  2. 把NSAutoRelease替换成@autoreleasepool{}块 
  3. 把assign的属性变为weak

 

 

其他文章:http://blog.csdn.net/zkdemon/article/details/7446385

 

dealloc方法的使用:

  • 已经开启了arc,dealloc还可以使用,只是在代码中中不能显示调用,在dealloc方法中不可以包含[super dealloc]。
  • 在dealloc中一般用来解除delegate,例如self.webView.delegate = nil;
  • 开始的时候注册了notification等,那么是需要在dealloc中把这些notification移除掉
  • 如果某个类没有调用dealloc方法,会导致内存泄露,这时要检查在该类内部是否有其他对象调用了该对象导致无法成功释放。
  • 大小: 28.4 KB
分享到:
评论

相关推荐

    ARC完全学习指南

    ARC(自动引用计数,Automatic ...这些知识点涵盖了ARC的原理、使用方法、内存管理原则、集成策略以及在特定场景下的应用和注意事项。通过全面掌握这些内容,开发者将能够在使用ARC进行iOS开发时更加得心应手。

    iOS 5 ARC完全指南

    《iOS 5 ARC完全指南》不仅全面介绍了ARC的概念与原理,还深入探讨了ARC在实际开发中的应用技巧与注意事项。对于iOS开发者而言,掌握ARC不仅能够提高编码效率,还能显著提升应用的稳定性和性能,是iOS开发不可或缺的...

    iPhone开发教程之iPhone内存释放注意事项两则--千锋培训

    ### iPhone开发教程之iPhone内存释放注意事项两则 #### 内存管理基础知识 在iOS开发过程中,内存管理是一项非常重要的任务。对于iOS应用来说,如果内存管理不当,可能会导致程序崩溃或者被系统强制关闭。在...

    ArcHydro中文操作手册

    ##### 3.1 ArcView环境下使用ArcHydro的注意事项 -在ArcView环境中运行ArcHydro时,需要注意以下几点: -确保已正确安装了ArcView及其相关组件。 -检查ArcView版本是否与ArcHydro兼容。 -配置环境设置,如设置...

    iOS 5 arc 指南

    - **迁移注意事项**:虽然自动迁移工具能大大减轻迁移过程中的工作量,但在迁移过程中仍需注意检查和解决可能出现的问题,例如确保所有引用都被正确处理,并且避免潜在的循环强引用等问题。 #### 属性(property) -...

    单例模式-ARC

    在iOS开发中,由于Objective-C的内存管理机制,特别是在引入Automatic Reference Counting(ARC)之后,实现单例模式有了新的方法和注意事项。 **单例模式的基本结构** 单例模式的核心是确保类的单例实例只有一个...

    ArcEngine培训教程

    15. **开发最佳实践**:了解开发ArcEngine应用时的注意事项和最佳实践,如错误处理、代码重用、性能监控等。 这个“ArcGIS Engine开发商培训”压缩包文件很可能是包含一系列教程文档、示例代码和练习材料,帮助...

    arcengine10.3破解

    ### 升级到 ArcGIS Engine 10.3 的注意事项 当从旧版本(如10.2)升级到ArcGIS Engine 10.3时,需要注意以下几点: 1. **兼容性检查**:确保现有应用程序能够在新版本中正常运行。这可能涉及到代码修改或重写部分...

    C#+ArcEngine:加载打开Shp矢量和栅格数据

    5. **注意事项** - 记得处理异常,确保文件路径正确。 - ArcEngine组件需要在项目中引用相应版本的Esri.ArcGISClient和Esri.ArcGISRuntime库。 - 操作完成后,记得清理资源,释放COM对象,防止内存泄漏。 以上...

    ArcEngine 要素转栅格数据 并转为ASCll码

    5. **开发注意事项**:虽然描述中提到这个程序并未完全完善,但开发GIS应用时需要注意以下几点: - 数据质量:确保输入的要素数据准确无误。 - 分辨率选择:栅格化过程中需要选择合适的分辨率,过高的分辨率可能...

    ArcEngine 最短路径分析(C#源码)

    5. **注意事项**:在实际应用中,需要考虑网络数据的完整性,确保所有必要的属性(如权重、方向、限制条件)都已正确设置。此外,对于大型网络,优化算法性能(如使用多线程、内存管理)也是重要的一环。 总结,Arc...

    ArcEngine 最短路径分析(源码)

    5. **注意事项** - 在进行最短路径分析之前,需要确保网络数据集已经被正确加载和配置。 - 确保所有的数据类型兼容,尤其是在处理不同的几何对象时。 - 考虑到性能问题,对于大规模数据集的操作需要进行优化,...

    Swift中的自动引用计数:释放内存的艺术

    - **使用闭包时的注意事项**:在使用闭包时,由于闭包可以捕获并强引用外部变量,容易导致循环引用。为了避免这种情况,可以使用`[weak self]`或`[unowned self]`来声明闭包。 - **延迟加载**:对于那些初始化成本较...

    ArcEngine的安装方法及其9.3版本最全面的授权文件

    ### 三、注意事项 1. **系统需求**:确保你的计算机满足ArcEngine 9.3的硬件和软件需求,包括操作系统版本、内存大小和硬盘空间。 2. **兼容性**:确认你的开发环境(如.NET Framework或Java SDK)与ArcEngine版本...

    block的循环引用导致的内存泄露的示例及解决办法

    五、其他注意事项 - 尽量避免在Block内部修改捕获对象的属性,因为这可能导致意外的副作用。 - 使用`@autoreleasepool`来限制Block的生命周期,有助于避免内存泄漏。 - 使用`autoreleasepool`配合`__block`关键字,...

    虹软人脸识别(ARC)

    性能优化与注意事项 - 调整算法参数以适应不同的应用场景,例如提高检测速度或提高识别精度。 - 尽量减少不必要的图像处理,如缩放、裁剪,以减少计算负担。 - 注意处理异常情况,如无脸、多脸、遮挡等情况。 - 在...

    25个增强iOS应用程序性能的提示和技巧

    #### 一、使用ARC进行内存管理 **ARC(Automatic Reference Counting)**是一种自动内存管理机制,它首次出现在iOS 5中,旨在帮助开发者解决内存管理的问题。在ARC出现之前,开发者需要手动进行retain和release操作...

Global site tag (gtag.js) - Google Analytics