`
webcode
  • 浏览: 6066084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Objective-C内存管理与原理剖析(二)口决与范式

 
阅读更多

原文链接:http://www.cnblogs.com/VinceYuan/archive/2010/03/08/1680492.html

二 口诀与范式
1 口诀。
1.1 谁创建,谁释放(类似于“谁污染,谁治理”)。如果你通过alloc、new或copy来创建一个对象,那么你必须调用release或autorelease。换句话说,不是你创建的,就不用你去释放。
例如,你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用release或autorelease。 如果你在一个class的某个方法中alloc一个成员对象,且没有调用autorelease,那么你需要在这个类的dealloc方法中调用 release;如果调用了autorelease,那么在dealloc方法中什么都不需要做。
1.2 除了alloc、new或copy之外的方法创建的对象都被声明了autorelease。
1.3 谁retain,谁release。只要你调用了retain,无论这个对象是如何生成的,你都要调用release。有时候你的代码中明明没有 retain,可是系统会在默认实现中加入retain。不知道为什么苹果公司的文档没有强调这个非常重要的一点,请参考范式2.7和第三章。
2 范式。
范式就是模板,就是依葫芦画瓢。由于不同人有不同的理解和习惯,我总结的范式不一定适合所有人,但我能保证照着这样做不会出问题。
2.1 创建一个对象。

2.2 创建一个autorelease的对象。

2.3 Release一个对象后,立即把指针清空。(顺便说一句,release一个空指针是合法的,但不会发生任何事情)

2.4 指针赋值给另一个指针。

2.5 在一个函数中创建并返回对象,需要把这个对象设置为autorelease

2.6 在子类的dealloc方法中调用基类的dealloc方法

2.7 在一个class中创建和使用property。
2.7.1 声明一个成员变量。

2.7.2 声明property,加上retain参数。

2.7.3 定义property。

2.7.4 除了dealloc方法以外,始终用.操作符的方式来调用property。
self.objB 或者objA.objB
2.7.5 在dealloc方法中release这个成员变量。

示例代码如下(详细代码请参考附件中的memman-property.m,你需要特别留意对象是在何时被销毁的。):

2.7.6 给这个property赋值时,有手动release和autorelease两种方式。

分享到:
评论

相关推荐

    Effective Objective-C 2.0

    《Effective Objective-C 2.0》是一本由Matt Galloway所...《Effective Objective-C 2.0》通过解释Objective-C的关键概念、内存管理、编程范式、框架使用和设计模式等内容,旨在帮助开发者编写出更加高效和健壮的代码。

    iOS 8 Programming Fundamentals with Swift

    - **内存管理**:Swift提供了自动化的内存管理机制,大大减轻了开发者对于内存管理的负担。 - **Cocoa兼容性**:Swift设计之初就考虑到了与Cocoa API的良好兼容性,这意味着Swift可以直接调用C和Objective-C编写的...

    面试资料全集

    C语言的关键特性包括指针操作、内存管理、结构化编程结构(if-else、循环、函数)以及系统级编程能力。 Objective-C: Objective-C是苹果公司用于开发iOS和Mac应用程序的主要编程语言,它是一种面向对象的语言,...

    内存清道夫 检测内存泄漏强力单元

    3. **引用计数**:在某些语言或库中,如Python和Objective-C,内存管理依赖于引用计数。每个对象都有一个引用计数,当引用计数变为零时,对象将被自动删除。然而,循环引用可能导致引用计数无法正确降低,从而引发...

    JS-Native交互电子书

    - **内存管理**:有效管理JS运行过程中产生的资源。 - **异常处理**:提供稳定可靠的错误处理机制。 - **4.3.6 性能优化** - **编译优化**:采用提前编译技术,减少执行时间。 - **多线程执行**:利用多核CPU...

    objc 中国 app 架构

    7. ** Reactive Programming**:Objective-C可以通过RAC(ReactiveCocoa)或者RxSwift实现反应式编程,这种编程范式让开发者能够以声明式的方式来处理异步数据流,简化复杂的事件处理。 8. **SwiftUI**:尽管不是...

    pop-handapp:POP Handapp

    在POP Handapp中,Objective-C被用来创建和管理应用程序的结构、视图控制器、模型对象以及与用户交互的界面元素。 POP(Protocol Oriented Programming)是一种编程范式,强调利用协议(Protocol)来实现多态性,而...

    kickstarter 开源了 iOS App 的代码.zip

    1. **Objective-C 或 Swift**: Kickstarter 的 iOS 应用程序可能使用了 Objective-C 或 Swift 作为主要编程语言。Objective-C 是苹果的老牌编程语言,而 Swift 是后来推出的新一代语言,更现代且易于阅读和编写。...

    博客:对过往做做总结

    了解Objective-C的内存管理(MRC)、Category、Protocol等特性对iOS开发很重要。 5. **TensorFlow**: TensorFlow是Google开发的深度学习框架,广泛应用于机器学习和人工智能领域。它支持定义、训练和部署各种模型,...

    IOS应用源码——rmorlok-GetOffMyLawn-148492d.rar

    在iOS开发领域,源码分析是一项至关重要的技能,它有助于开发者深入理解应用程序的工作原理,提升编程技巧,以及解决潜在问题。本文将探讨名为"rmorlok-GetOffMyLawn-148492d"的iOS应用源码,通过分析其结构、功能和...

    Ios Programming The Big Nerd Ranch Guide (2nd Edition).Pdf

    C语言进行iOS应用开发的各种知识点,例如App Store、Apple、Bonjour、Cocoa、Cocoa Touch、Finder、Instruments、Interface Builder、iPad、iPhone、iPod、iPod touch、iTunes、iTunes Store、Keychain、Leopard、...

    python ,Java,C语言教程.docx

    学习C语言可以帮助理解计算机底层工作原理,为学习其他语言如C++或Objective-C打下基础。 这三门语言各有优势,Python适合快速开发和原型设计,Java适合大型项目和企业应用,C语言则适用于性能敏感的场景。掌握这些...

    iOS6 Program Cookbook

    Objective-C是iOS开发中使用的主要编程语言,它支持面向对象和过程式编程范式,理解这些基础知识点对于编写高质量的iOS应用至关重要。 此外,书名中提及的iOS6是指该书专注于介绍与iOS6版本相关的开发知识。iOS6是...

    重力的编程语言

    它的核心特性包括C语言的简洁性、JSON的易读性、解释器执行的灵活性以及与Objective-C的紧密集成。Gravity支持虚拟机运行字节码,使其具有跨平台兼容性。它还引入了纤维(fibers)概念,增强了并发处理能力,而Pratt...

    主流编程语言的学习.pdf

    - SQL:数据库查询与管理。 - R:大数据分析。 - VB:简单程序构建。 - Ruby:简洁易学,安全相关应用。 选择编程语言应根据项目需求、开发效率和个人兴趣,不断学习和适应新的语言和技术是程序员的持续任务。随着...

Global site tag (gtag.js) - Google Analytics