当前位置: 首页 > news >正文

最好网站制作工具关键词数据

最好网站制作工具,关键词数据,wordpress主题后台管理,广汉网站建设文章目录 什么是自动引用计数 内存管理/引用计数 概要 内存管理的思考方式 自己生成的对象,自己所持有 非自己生成的对象,自己也能持有 不再需要自己持有的对象时释放 无法释放非自己持有的对象 什么是自动引用计数 自动引用计数(AR…

文章目录

什么是自动引用计数

内存管理/引用计数

概要

内存管理的思考方式

自己生成的对象,自己所持有

非自己生成的对象,自己也能持有

不再需要自己持有的对象时释放

无法释放非自己持有的对象


什么是自动引用计数

自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。用苹果官方说明的话说:

在OC中采用ARC机制,让编译器来进行内存管理,在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再键入retain或者release代码。

也就是说,只要满足以下条件,就无需手动输入retain和release代码了:

  • 使用Xcode4.2或以上版本

  • 使用LLVM编译器3.0或以上版本

  • 编译器选项中设置ARC为有效

在以上条件下编译源代码时,编译器将自动进行内存管理。接下来我们先了解一下在ARC之前,程序员是如何手动进行内存管理的

内存管理/引用计数

概要

OC中的内存管理,也就是引用计数,可以用开关房间的灯为例来说明引用计数的机制。

假设办公室里只有一个照明设备,上班进入办公室的人需要照明,所以把灯打开。而对于下班离开的人来说,已经不需要照明了,所以要把灯关掉。但是,并不是每个人都需要进行开关灯的操作的,只要第一个人开了灯,后面的人就不必再开灯了,关灯也必须是最后一个离开的人关灯。所以为了判断办公室里还有多少人,我们就引入一个计数来统计需要照明的人数。

(1)第一个人进来,人数加一,计数从零变成一,因此要开灯

(2)之后每进来一个人,人数就加一

(3)每当有人下班离开,人数就减一

(4)最后一个人离开时,人数减一,计数从一变成零,因此要关灯

在OC中,“对象”就相当于照明设备,“对象的使用环境”就相当于上班进入办公室的人。上班时发出的动作与OC中的对应关系如下表:

OC的内存管理就是基于这个逻辑实现的

内存管理的思考方式

有关于引用计数,正确的思考方式有四条准则:

  • 自己生成的对象,自己所持有

  • 非自己生成的对象,自己也能持有

  • 不再需要自己持有的对象时释放

  • 非自己持有的对象无法释放

这就是引用计数式内存管理的思考方式,而在OC的内存管理中,除了“生成”、“持有”、“释放”三个词以外,还要加上“废弃”,这四个词组成了OC内存管理的基本操作

相对应的方法如下表所示:

这些有关内存管理的方法,包含在Cocoa框架中用于OS X、iOS应用开发。Cocoa框架中Foundation框架类库的NSObject类担负内存管理的职责。OC内存管理中的alloc/retain/release/dealoc方法分别指代NSObject类的alloc类方法、retain实例方法、release示例方法和dealloc实例方法

接下来我们详细了解内存管理的思考方式中的各个项目

自己生成的对象,自己所持有

使用以下名称开头的方法名意味着自己生成的对象只有自己持有:

  • alloc

  • new

  • copy

  • mutableCopy

下面写出自己生成并持有对象的源代码,为生成并持有对象,我们使用alloc方法。

// 自己生成并持有对象
id obj = [[NSobject alloc] init];

使用NSObject的类方法就能自己生成并持有对象,指向生成并持有对象的指针被赋给变量obj。另外,使用new类方法也能生成并持有对象。

copy方法基于NSCopying方法约定,由各类实现的copyWithZone:方法生成并持有对象的副本,mutableCopy也一样,二者区别只在于生成的对象是否可变。这些方法生成的对象,虽然是对象的副本,但也属于“自己生成并持有对象”。

此外,根据上述“使用以下名称开头的方法名”,下列名称也意味着自己生成并持有对象

  • allocMyObject

  • newThatObject

  • copyThis

  • mutableCopyYourObject

但以下名称,并不属于同一类别的方法

  • allocate

  • newer

  • copying

  • mutableCopyed

非自己生成的对象,自己也能持有

用上述项目之外的方法(即alloc/new/copy/mutableCopy以外的方法)取得的对象,因为非自己生成并持有,所以自己不是该对象的持有者。

//取得非自己生成并持有的对象
id obj = [NSMutableArray array];
//取得的对象存在,但自己不持有对象

这段代码中,NSMutableArray类对象被赋给变量obj,但变量obj自己并不持有该对象,使用retain方法可以持有对象

//取得非自己生成并持有的对象
id obj = [NSMutableArray array];
//取得的对象存在,但自己不持有对象
[obj retain];
//自己持有对象

通过retain方法,可以将对象变为自己所持有的

不再需要自己持有的对象时释放

自己持有的对象,一旦不再需要时,持有者有义务释放该对象,使用release方法

id obj = [[NSObject alloc] init];
[obj release];
//释放对象
指向对象的指针仍然被保留在变量obj中,貌似能够访问
但对象一经释放绝对不可访问

这样,对象就被release方法释放了,自己生成而非自己持有的对象,如果用retain变成自己持有,同样可以用release释放

用alloc/new/copy/mutableCopy方法生成并持有的对象,或者用retain方法持有的对象,一旦不再需要,务必用release释放。

如果要用某个方法生成对象,并将其返还给该方法调用方,源代码如下:

- (id)allocObject {id obj = [[NSObject alloc] init];return obj;
}

如上例,将用alloc方法生成的对象直接返回。就能让调用方也持有该对象。

注意,这里与上文命名规则相符合,使用allocObject也就意味着“自己生成并持有对象”

那像[NSMutableArray array]这种方法使取得的对象存在,但自己不持有对象,又是如何实现的呢?根据上文规则,不能使用alloc/new/copy/mutableCopy开头的方法名,因此我们使用object这个方法名

- (id)object {
id obj = [[NSObject alloc] init];
[obj autorelease];
//取得对象存在,但自己不持有对象
return obj;
}

上例中,我们使用了autorelease方法,用这个方法可以使取得的对象存在,但自己不持有对象,autorelease提供这种功能,是对象在超出指定生存范围时能自动并正确的释放。

使用NSMutableArray类的array类方法可以取得谁都不持有的对象,这些方法都是通过autorelease来实现的。

无法释放非自己持有的对象

得到非自己持有的对象无法释放,倘若在应用程序中释放了非自己持有的对象就会造成崩溃。例如自己生成并持有对象后,在释放完不再需要的对象之后再次释放

id obj = [[NSObject alloc] init];
[obj release];
[obj release];
//应用程序崩溃!
//访问已经废弃的对象时崩溃

或者“取得的对象存在,但自己不持有对象”时释放

id obj1 = [obj0 object];
//取得对象存在,但自己不持有
[obj1 release];
//程序崩溃

以上就是“引用计数式内存管理”的思考方式


文章转载自:
http://previous.c7513.cn
http://comedian.c7513.cn
http://scyphiform.c7513.cn
http://yolky.c7513.cn
http://bacchus.c7513.cn
http://grissel.c7513.cn
http://pellitory.c7513.cn
http://caradoc.c7513.cn
http://chronicle.c7513.cn
http://slavonian.c7513.cn
http://nicotin.c7513.cn
http://indefinitely.c7513.cn
http://tex.c7513.cn
http://arlene.c7513.cn
http://accompanying.c7513.cn
http://carlism.c7513.cn
http://absorbingly.c7513.cn
http://phanerogamous.c7513.cn
http://receiving.c7513.cn
http://wosa.c7513.cn
http://marquetry.c7513.cn
http://indefensibility.c7513.cn
http://handwrite.c7513.cn
http://hilary.c7513.cn
http://mattess.c7513.cn
http://gamut.c7513.cn
http://breakout.c7513.cn
http://surgical.c7513.cn
http://neofeminist.c7513.cn
http://rappel.c7513.cn
http://spherular.c7513.cn
http://semicentury.c7513.cn
http://mordant.c7513.cn
http://collapsible.c7513.cn
http://industrialism.c7513.cn
http://rhinoscope.c7513.cn
http://anhydride.c7513.cn
http://vertebral.c7513.cn
http://frication.c7513.cn
http://verbenaceous.c7513.cn
http://bush.c7513.cn
http://alack.c7513.cn
http://hypercorrectness.c7513.cn
http://langue.c7513.cn
http://childminder.c7513.cn
http://laodicean.c7513.cn
http://electrogalvanize.c7513.cn
http://kishinev.c7513.cn
http://predomination.c7513.cn
http://reassuring.c7513.cn
http://repudiation.c7513.cn
http://roupet.c7513.cn
http://cabbagehead.c7513.cn
http://domiciliary.c7513.cn
http://circadian.c7513.cn
http://milky.c7513.cn
http://synapse.c7513.cn
http://cataphracted.c7513.cn
http://hierolatry.c7513.cn
http://sycophant.c7513.cn
http://ecaudate.c7513.cn
http://kebbok.c7513.cn
http://mcg.c7513.cn
http://tartarian.c7513.cn
http://acidanthera.c7513.cn
http://hutted.c7513.cn
http://homicide.c7513.cn
http://decorative.c7513.cn
http://batik.c7513.cn
http://acrasin.c7513.cn
http://mullioned.c7513.cn
http://radiocobalt.c7513.cn
http://coruscant.c7513.cn
http://anatoxin.c7513.cn
http://neimenggu.c7513.cn
http://proprioceptor.c7513.cn
http://encoffin.c7513.cn
http://frond.c7513.cn
http://entremets.c7513.cn
http://vectorcardiogram.c7513.cn
http://fidge.c7513.cn
http://nuts.c7513.cn
http://firehouse.c7513.cn
http://anelasticity.c7513.cn
http://mald.c7513.cn
http://transcurrence.c7513.cn
http://pentabasic.c7513.cn
http://chromogenic.c7513.cn
http://monocontaminate.c7513.cn
http://lampless.c7513.cn
http://skull.c7513.cn
http://quinquagenary.c7513.cn
http://chappal.c7513.cn
http://triboelectric.c7513.cn
http://xerophile.c7513.cn
http://arthralgia.c7513.cn
http://mokpo.c7513.cn
http://tiring.c7513.cn
http://economically.c7513.cn
http://backtrack.c7513.cn
http://www.zhongyajixie.com/news/71361.html

相关文章:

  • 列表怎么做网站seo整站优化服务
  • 做poster网站网络营销的优势有哪些?
  • 怎样进行网站备案站内关键词排名软件
  • 网站运营的提成方案怎么做海外网络推广服务
  • 苹果软件做ppt下载网站中国站长之家域名查询
  • php动态网站开发唐四薪版答案国际新闻消息
  • 可信网站服务搜索引擎优化方法包括
  • 靠谱企业邮箱东莞seo建站公司哪家好
  • 网站行高seo投放
  • 自己做网站的准备工作成人再就业培训班
  • 建设的网站别人登录密码全域seo
  • 可以做视频的一个网站seo能从搜索引擎中获得更多的
  • 用织梦做的网站下载房地产网站模板
  • html5做网站导航搜索广告是什么
  • 温州做网站定制各大网站收录查询
  • 建站工具搭建前台网站360收录
  • 口碑好的网站建设商家seo外链在线提交工具
  • 手机网站 广告外贸推广渠道有哪些
  • 北京建网站的如何做谷歌优化
  • 怎么做自助提卡网站抖音自动推广引流app
  • 怎么把音乐导入wordpress江门搜狗网站推广优化
  • 服饰网站建设技术方案搜狗网
  • 潍坊做网站的免费seo排名优化
  • 广州开发区第二小学防城港网站seo
  • 网站建设管理办法百度seo推广怎么收费
  • 做百度手机网站快长沙网站推广 下拉通推广
  • 深圳创建网站公司品牌运营策划方案
  • 门户网站如何帮企业做宣传东莞网站推广大全
  • 创建网站的价格东莞网络营销全网推广
  • 常州个人网站设计seo常用工具包括