`
yangli
  • 浏览: 60029 次
  • 性别: 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,同时还要避免使用创建自动释放对象的便利函数。

 

 

 

分享到:
评论

相关推荐

    The Swift Programming Language_笔记

    通过ARC(Automatic Reference Counting,自动引用计数)来简化内存管理。我们的框架栈则一直基于Cocoa。Objective-C进化支持了块、collection literal和模块,允许现代语言的框架无需深入即可使用。(by gashero)感谢...

    Cocoa-Mac-Tricks:[维护] [macOS] 在 macOS 上完成的棘手事情,完成了!

    可可Mac技巧在 Mac OS X 上完成的棘手事情,... 一个没有 .xib 文件,只有 C 代码的 Cocoa 应用程序。 检查 Mac 笔记本电脑的盖子是否合上。 在不使用私有 API 的情况下检测四指触控板点击事件。 收到内存不足警告。

    Objective-C中的Block

    在这篇笔记开始之前,我们需要对以下概念有所了解。注:这里所说的堆和栈与数据结构中的堆和栈不是一回事。...对于堆区的管理是采用链表式管理的,操作系统有一个记录空闲内存地址的链表,当接收到程序分配内存的申

    全面解析Objective-C中的block代码块的使用

    我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值、局部变量的值等。由编译器自动创建与释放。其操作方式类似于数据结构中的栈,即后进先出、...

    java引用传递笔试题abc-javaScript_call_native:一个javaScript与Native原生App之间互调的demo

    内存管理 多线程 ##二、JavaScriptCore 简介 ###1、JavaScriptCore 和 JavaScriptCore 框架 首先要区分JavaScriptCore 和 JavaScriptCore框架(同后文中的JSCore) JavaScriptCore框架 是一个苹果在iOS7引入的框架,...

    亚信java笔试题-iOSResourceCollect:iOSResourceCollect/iOS资源收集

    Block介绍(二)内存管理与其他特性 序号 已读 分类tag 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0011 roadofios/advancedUI/0119_week12_day1/GCD_dispatch/GCD_dispatch/ZXAppDelegate.m 0012 ...

    读《ThreadingProgrammingGuide》笔记2:线程配置与RunLoop

    文章中有对官方文档的翻译,也有自己的理解,官方文档中代码片段的示例在这篇文章中都进行了完整的重写,还有一些文档中没有的代码示例,并且都使用Swift完成,给大家一些Objective-C与Swift转换的参考。线程也是...

    idris-cplusplus:Idris 的实验性 C++11 后端

    使用 C++11 的 shared_ptr(引用计数)进行内存管理,而不是 gc(有利有弊) C++11 stdlib 有一些 unicode 支持(由这个后端使用) 目前正在使用 gcc/clang 的 __int128_t 来支持快速和肮脏的大整数——计划切换到...

    iphone开发笔记

    退回输入键盘 2 CGRect 2 CGPoint & CGSize 3 设置透明度 3 设置背景色 3 自定义颜色 3 竖屏 3 横屏 3 状态栏高 3 导航栏、工具栏高 3 ...Objective-C内存管理 44 iphone更改键盘右下角按键的type 45

    编程狂人第十二期

    Objective-C相关Category的收集 文章: 豆瓣 CODE 两年历程回顾:git 不是万能的,没有 review 是万万不能的 Android WebKit消息处理 Tim Bray:2014年软件之路 后端架构 MongoDB与内存 《淘宝技术这十年》读书笔记...

    SYCache:具有磁盘持久性的花式缓存

    它由内存中的支持,因此在内存不足时会自动清除自身。 下次请求时,清除的存储密钥将自动从磁盘加载。 用法 该API很简单。 - ( id )objectForKey:( NSString *)key; - ( void )objectForKey:( NSString *)key using...

    yontma-mac:你永远不会把我活着!

    这样可以防止笔记本电脑小偷在机器仍处于开机状态且加密密钥位于内存中时,通过DMA攻击随后访问您的加密数据,并减少了类似样式的冷启动攻击的威胁。 二进制文件 YoNTMA可在Mac上使用,并已在10.11、10.10、10.9和...

    DailyLearning:我的日常学习〜

    内存管理 动画 多线程 数据存储 Web相关 底层重点知识 大前端:red_heart: 解析-Flutter 解析-Weex 性能优化 代码规范 解析-架构搭建 解析-设计模式 解析-组件化架构 ... Swfit 三方轮子解析:light_bulb: 阅读笔记 CS...

Global site tag (gtag.js) - Google Analytics