完全是按照书上章节的顺序来的 这次是第九章的内容 关于内存管理
作为一名一直写java,当初就是因为java的自动垃圾回收机制,于是偷懒投奔java阵营的来说,这次不得不又回过头来面对这个问题了。后面的笔记只是对书中一些内容的记录总结,由于没有实战,具体使用中会碰到什么问题还是不得而知,而且我想那一定会存在相当多的问题,好在最后给出的三条准则还是非常易用的。(听同伴说xCode提供了检查内存泄露的工具,挺好用)
本章最后提到了Objective-C也同样可以打开垃圾回收,不过由于只对高版本有效,并非通用,所以个人感觉既然使用了Objective-C,因此还是应该掌握内存管理的方法。
对象的声明周期:
诞生(通过alloc或new)、实现(接收消息和执行操作)、交友(借助方法的组合和参数)、死去(被释放)
Cocoa使用引用计数
当使用alloc,new或者copy方法创建一个对象时,计数器值设为1
发送retain消息增加计数器值,减少使用release
当计数器归0,Objective-C自动发送dealloc消息,可以重写dealloc方法,但是不要直接去调用该方法
发送retainCount消息获得当前计数器值
- (id) retain;
- (void) release;
- (unsigned) retainCount;
[[car retain] setTire:tire at Index:2];
表示要求car对象将计数器加1,并执行setTire操作
一种set方法的正确内存管理方法
- (void) setEngine: (Engine *) newEngine{
[newEngine retain];
[engine release];
engine=newEngine;
}
自动释放池
NSObject类提供了autorelease方法
- (id) autorelease;
执行后对象将被添加到自动释放池中,自动释放池被销毁时,向其中所有对象发送release消息
Cocoa内存管理规则
* 当使用new,alloc,copy方法创建一个对象时,该对象保留计数器为1,如果不再使用该对象,需要手动发送release或autorelease消息
* 通过其他方式获得的对象,则假设该对象计数器为1,并以设置自动释放,不需要做任何事,如果需要在一段时间内使用,那么保留该对象并确保在工作完成后释放
* 如果保留了某个对象,最终需要手动释放该对象,保持retain和release使用次数相等
例如
临时对象
NSMutableArray *array;
array=[[NSMutableArray alloc] init];
//...use array...
[array release];
使用了alloc获得对象,所以用完需要释放
NSMutableArray *array;
array=[NSMutableArray arrayWithCapacity:17];
//use it, autorelease
注意这里使用了arrayWithCapacity获得对象,并不是3者之一,所以无需做任何事
NSColor *color;
color=[NSColor blueColor];
和上述情况相同,其实这里的blueColor是一个全局单例对象,永远不会被销毁
拥有对象
- (void) doStuff{
//flonkArray is an instance variable
flonkArray=[NSMutableArray new];
}
- (void) dealloc{
[flonkArray release];
[super dealloc];
}
- (void) doStuff{
//flonkArray is an instance variable
flonkArray=[NSMutableArray arrayWithCapacity: 17];
[flonkArray retain];
}
- (void) dealloc{
[flonkArray release];
[super dealloc];
}
分享到:
相关推荐
### Objective-C基础教程第二版:OC入门基础教程 #### 一、Objective-C简介与环境搭建 **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能,并且是开发iOS应用的主要语言之一。尽管...
总的来说,“Objective-C学习笔记”应该覆盖了从基础语法到实际应用的全方位教程,适合初学者系统学习Objective-C,并通过实践加深理解。通过深入学习,开发者可以掌握开发苹果平台应用程序所需的关键技能。
《Objective-C语言教程0220.zip》是一个包含Objective-C编程基础及实例的课程资源包。这个压缩包中,我们能够找到一系列与学习Objective-C语言相关的材料,包括图像和文本文件,旨在帮助初学者理解并掌握这门强大的...
3. 书籍:《Objective-C编程:iOS与macOS应用开发》等专业书籍,深入讲解Objective-C语言和开发实践。 实践项目: 1. HelloWorld:创建第一个Objective-C程序,了解基本的语法和工程结构。 2. 简单应用:尝试开发一...
Objective-C(简称Obj-C或Objective-C)是苹果公司基于C语言构建的一种面向对象的编程语言,广泛应用于iOS和Mac OS X操作系统。本教程将深入探讨Object-C的基础概念、语法特性以及实际开发中的应用,旨在帮助初学者...
笔记_Objective_c基础教程
- **基础教程**:介绍Objective-C的基本语法和概念。 - **实例代码**:展示如何创建类、对象、进行消息传递等。 - **项目实践**:可能包含简单的iOS或macOS应用开发项目,帮助你将理论知识应用到实际。 - **进阶话题...
3. **Objective-C语言基础** - OC概述 - OC程序入口 - 字符串处理 - 输出方式 - 类的定义与使用 4. **面向对象编程在Objective-C中的实践** ### 1. iOS开发环境搭建 为了进行iOS应用开发,首先需要搭建合适的...
3. Objective-C编程语言概述:Objective-C是在C语言基础上增加面向对象语法的语言。OC代码中可以混入C语言代码,文件后缀名为.m,支持C++代码的引入,后缀名改为.mm。OC的关键字以@开头,字符串也以@开头,使用NSLog...
### iOS开发教程(大神原创笔记)核心知识点详解 #### 一、Unix相关知识点 **1. Unix指令:** - **pwd**:用于显示当前所在目录的位置。 - **ls**:列出当前目录下的所有文件及文件夹。 - **ls –l**:以详细...
本教程主要聚焦于iPhone开发的基础知识,包括Object-C语言、界面设计和UIViewController的使用。 Object-C是iOS开发的主要编程语言,它基于C语言并添加了Smalltalk的面向对象特性。对于初学者来说,《Learn Object-...
基础教程(如`Objective-C_2.0基础教程`和`Objective-C 基础教程【随书源码】`)帮助初学者理解语法、类、对象以及消息传递机制。 - 高级教程(如`Objective-C 高级教程`)则深入到内存管理、类别、协议等高级特性...
这组资料主要涵盖了iPhone应用开发的基础知识,包括Cocoa框架的基本原理、Dashcode的使用指南以及Objective-C的入门教程。这些文档旨在帮助开发者理解并掌握iPhone应用开发的核心技术和工具。 【描述】: 1. ...
本资源"我的笔记:iOS学习笔记"似乎是一个开发者分享的个人学习资料,其中可能涵盖了Objective-C的基础知识、iOS应用开发实践以及对一些第三方控件的分析和使用。 首先,Objective-C作为iOS开发的基础,其语法特性...
### iPhone开发基础教程知识点概述 #### 一、开发前的准备 - **硬件需求**:首先,需要确保拥有一台运行OS X Leopard (10.5.3或更高版本)的基于Intel的Macintosh计算机。这包括2006年后发布的任何Macintosh计算机,...
Objective-C是早期iOS开发的主要语言,它基于C语言,加入了Smalltalk的面向对象特性。随着Swift的发布,苹果推荐开发者转向这种更现代、安全、高效的编程语言。Swift语法简洁,易于阅读,且支持类型推断和闭包,大大...
第一篇基础篇,主要介绍 iOS 9 开发概述、iOS 9 的开发工具 Xcode 7、Objective-C 语言基础、Cocoa 基础等内容,旨在帮助读者建立起 iOS 9 技术的思想框架,并且对 iOS 9 开发的过程有一个初步的了解。 第二篇界面...
资料中包含的"Objective-C_2.0 基础教程"和"Objective-C 高级教程"是学习Objective-C的好起点。同时,"Cocoa基本原理指南"深入介绍了Cocoa Touch框架,这是构建iOS用户界面的关键。 其次,"iPhone开发笔记实录(代码...