IOS开发:内存管理课件.ppt

IOS开发:内存管理课件.ppt

ID:57057736

大小:1.13 MB

页数:17页

时间:2020-07-30

IOS开发:内存管理课件.ppt_第1页
IOS开发:内存管理课件.ppt_第2页
IOS开发:内存管理课件.ppt_第3页
IOS开发:内存管理课件.ppt_第4页
IOS开发:内存管理课件.ppt_第5页
资源描述:

《IOS开发:内存管理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第二十五章:内存管理重要性第一代iPhone和iPhone3G的内存大小均为128MB,而iPhone3GS扩充到256MB。同样地,iPad的内存大小也是256MB。iPhone4的内存升级到512MB但是其中一半容量用于屏幕缓冲和其他系统进程,所有iphone只有大约64M的内存用来运行应用程序,基本上不容许我们开发软件存在任何内存泄露iphone的内存管理当一个对象不再需要时,要及时释放它所占用的内存Objective-C采用了引用计数处理内存管理,简单讲,每个对象有一个与之关联的整数,可以将它称为引用计

2、数器或保留计数器引用计数大于0时,代表对象还有引用引用计数等于0时,代表对象可以释放引用计数可以retainCount消息可以获得这个对象的引用计数,返回的是NSUInteger整数;每一次必须保持该对象时,就发送一条retain消息,使其引用次数加1。如:[personretain];不再需要对象时,可以通过发送release消息,使对象的引用次数减1。如:[personrelease];将对象添加到任何类型的容器类中都会使该对象的引用计数增加。从任何容器类中删除对象都能够使其引用计数减少;引用计数当对象的引

3、用计数不为0,系统就不会释放对象使用的内存;当对象的引用计数达到0时,系统就知道不再需要这个对象,系统就会释放它内存,这时系统会自动发送一条dealloc消息来实现(我们不能自行调用dealloc方法);在Objective-C中,必须严格使用引用计数机制来控制内存的分配和释放。引用计数和实例变量-(void)setSec:(Secretary)s{sec=s;}考虑下面问题?1,在main函数中释放了s1,那么b1中的实例变量怎么办?2,原来b1实例变量sec的值怎么办?3,什么时候释放这些实例变量?引用计数

4、和实例变量-(void)setSec:(Secretary)s{sec=s;}考虑下面问题?1,在main函数中释放了s1,那么b1中的实例变量怎么办?答:对s1调用执行retain方法;2,原来sec的值怎么办?答:当原来sec不为nil,调用release;3,什么时候释放这些实例变量?答:重写dealloc方法;做法:释放实例变量,并且调用父类中的dealloc方法;存取器在Objective-C2.0中,@property用来设置实例变量的各种属性:(1)读写属性(readwrite/readonly)

5、,(2)赋值语义(assign/retain/copy),(3)对多线程的支持(automicity,nonatomic)注:并且每组的各个选项只可以出现一个或不出现@property各个参数NSObject内存管理的方法获得对象当前引用计数的方法retainCount:返回当前对象的引用计数值获得对象所有权的方法alloc:分配内存,将对象的引用计数设置为1copy:拷贝对象,将对象的引用计数设置为1retain:使对象的引用计数值加1释放对象所有权的方法release:使对象的引用计数值减1autorele

6、ase:我们不想取得对象所有权,又不希望对象被释放,使对象交给自动释放池处理释放对象内存空间的方法dealloc:释放内存空间自动释放池如果某个对象obj在自动释放池创建(NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init])与[pooldrain]之间使用[objautorelease]则该对象将会被放在自动释放池中在执行[pooldrain]后,池中每个对象引用计数减1(并非清零);自动释放池并未包含对象本身,而是关于对象的引用由new、copy、all

7、oc创建的对象不会自动入池,须通过手动发送autorelease消息,可以将一个对象添加到其中,以便以后释放对放入到自动释放池中的对象,不要轻易调用release自动释放池的效率并不高,所以在iphone开发时,并不建议使用在开发复杂的应用中,程序中可以有多个自动释放池,并且它们可以是嵌套的:NSAutoreleasePool*tempPool;for(i=0;i

8、yobjectshere[tempPooldrain];}自动释放池垃圾回收1,Objective-C2.0开始提供了垃圾回收,有了垃圾回收,就不必考虑有关保持和释放对象、自动释放或引用计数了。系统会自动处理内存问题2,即使有垃圾回收机制也许深入了解内存管理,因为iPhone运行时环境不支持垃圾回收。内存管理规则(1)释放对象,可以释放它所占用的内存发送一条release消息不一定销毁

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。