重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在本章,你将学到:
成都创新互联-专业网站定制、快速模板网站建设、高性价比普安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式普安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖普安地区。费用合理售后完善,十载实体公司更值得信赖。复习旧的手工内存管理的策略
对象所有权策略
基于旧的手工内存管理之上的新的自动内存管理
什么是对象的拷贝以及如何使用它
如何恰当的使用autorelease和release方法
复习内存测量
iPhone是一个内存有限的环境。但是,很多开发者要么低估了它,要么高估了它,因此并没有利用好iPhone上的可用内存来提升性能。还有一些开发者非常担心iPhone上的内存和性能,以至于他们过度优化,这样其实对代码的可阅读性是非常有害的,也使得日后的维护变得更加困难。
为了有效利用内存来提升性能,同时使代码更容易阅读,又不让应用崩溃,你需要理解iPhone环境下的内存结构。你需要学习如何避免在内存在中过多引用对象,它能够导致内存警告和程序崩溃。你同样需要知道何时retain或release一个对象;如果在内存中的对象太少,可能会使得你的计算变得缓慢,因为你需要重新构造对象或从文件系统中加载。
简单的回顾
本部分是学习新的自动引用计数(ARC)的一个很好的过渡。有些人可能对于转到新的课程会有些迷惑。我希望本部分能够帮助你非常顺利的过渡到新的ARC机制上。
旧的对象所有权策略
如果A对象有B对象的一个强引用,那么A对象需要手动的release对象B,这是旧的概念。如果A对象alloc,copy,mutableCopy,new或retain对象B,那么A对象就有了对象B的强引用。另一方面,如果A对象没有使用这些方法,那么A对象拥有B对象的弱引用。
对于旧的内存管理机制,如果你的对象或方法有另一个对象B的强引用,你有责任release或autorelease对象B。每一个B对象的强引用都会使得它的引用计数加1。如果没有任何对象拥有B对象的强引用,换句话说,B对象的引用计算为0,B对象就会被deallocated(Listing 7.1)。
Listing 7.1. Release the Object if You Have a Strong Reference
- (void)doSomething {
NSObject *obj = [[NSObject alloc] init];
NSLog(@"obj: %@", obj);
[obj release];
}
AutoRelease
autorelease方法会将对象发送到一个池中,然后声明这个对象稍后将要被release掉。使用这个方法,你不想拥有任何对象的强引用,但是你也不想它被dellocated。请查看Listing 7.2 。
Listing 7.2. Memory Issue
- (NSObject *)getObj {
NSObject *obj = [[NSObject alloc] init];
return obj;
}
- (void)anotherMethod {
NSObject *myObj = [self getObj];
// do something
// Should I release the object here?
[myObj release];
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。