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

路由器上建网站搜索引擎网站大全

路由器上建网站,搜索引擎网站大全,asp做网站,常州网站建设公司方案ARC ARC是swift使用的一种管理应用程序内存的机制,对于C语言我们知道,当我们申请一块空间,通常需要手动释放,不然会造成空间浪费,而有了ARC机制,你无需考虑内存的管理,因为ARC会在类的实例不再…

ARC

ARC是swift使用的一种管理应用程序内存的机制,对于C语言我们知道,当我们申请一块空间,通常需要手动释放,不然会造成空间浪费,而有了ARC机制,你无需考虑内存的管理,因为ARC会在类的实例不再被使用时,自动释放内存空间。

ARC通常适用引用类型,比如类。

自动引用计数的规则:

  • 每创建一个类的实例对象,ARC就分配一块内存存储实例信息,引用计数+1
  • 当实例不再被使用,ARC自动释放实例所占内存,引用计数-1
  • 当引用计数为0时,实例被销毁。

eafe02e25f7c4256ba0dc37c46ebda3b.png

类实例之间的循环强引用

循环强引用:两个类实例都持有一个强引用的指向对方的属性

解决循环强引用方法:类之间的关系使用弱引用代替强引用。

303612e7d14e47098148a9f3c6655503.png

循环强引用示例:

class A{let aStr:Stringvar b:B?init(a: String) {self.aStr = a}deinit{print("A's deinit")}
}class B{var bStr:Stringvar a:A?init(str:String){self.bStr = str}deinit {print("B's deinit")}
}var objA:A?
var objB:B?objA = A(a: "AAAA")
objB = B(str: "BBBB")objA!.b = objB
objB!.a = objAobjA = nil
objB = nil
//由于objA.b还指向B,objcB.a还指向A所以两者的实例还未被释放,此时打印无结果

此时如果要释放A和B只能这么做:

5be889ae49d9439ba870cee566853113.png

一般解决该办法之一是通过弱引用weak,弱引用不会增加ARC计数。

因此可以改成:

class A{let aStr:Stringweak var b:B?//使用弱引用init(a: String) {self.aStr = a}deinit{print("A's deinit")}
}class B{var bStr:Stringweak var a:A?//使用弱引用init(str:String){self.bStr = str}deinit {print("B's deinit")}
}var objA:A?
var objB:B?objA = A(a: "AAAA")
objB = B(str: "BBBB")objA!.b = objB
objB!.a = objAobjA = nil//此时A释放
objB = nil//此时B释放

无主引用Unowned

解决循环引用的另一种方式就是无主引用,无主引用修饰的实例属性与引用它的实例有着相同的生命周期

  • 在声明属性或者变量时,在前面加上关键字unowned表示这是一个无主引用
  • 使用无主引用,必须确保引用始终指向一个未销毁的实例,这也意味着无主引用的对象有确定的值。
  • 如果试图在实例被销毁后,访问该实例的无主引用,会触发运行时错

0efe629cb31c4502aa0d294e729034fb.png

class A{let aStr:Stringvar b:B?//使用弱引用init(a: String) {self.aStr = a}deinit{print("A's deinit")}
}class B{var bStr:Stringunowned var a:A?//使用弱引用init(bStr: String, a: A? = nil) {self.bStr = bStrself.a = a}deinit {print("B's deinit")}
}var objA:A?objA = A(a: "AAAA")objA!.b = B(bStr: "bbbb",a:objA)objA = nil
//这里会释放A和B,因为B里的a是无主引用,类似于弱引用,这样就没有指向A的对象了,A被释放,A里面的b也被销毁,指向B的对象也没有了,B被释放

闭包引起的循环强引用

将一个闭包赋值给类实例的某个属性,并且这个闭包体中又使用了这个类实例时。这个闭包体中可能访问了实例的某个属性,或者闭包中调用了实例的某个方法,这两种情况都导致了闭包“捕获”self,从而产生了循环强引用。

b80ac61229e34ca99609308367f66c1b.png

例如:


class A{let aStr:Stringlet isShow:Boollazy var closures:()->String = {if self.isShow {return self.aStr}else{return "isShow is False"}}init(aStr: String, isShow: Bool) {self.aStr = aStrself.isShow = isShow}deinit{print("A's deinit")}}var objA:A?
objA = A(aStr: "AAAA", isShow: true)var value:String = objA!.closures()
print(value)objA = nil

解决办法跟类实例循环引用方法一样,声明每一个捕获引用为弱引用或者无主引用。

  • 弱引用:在被捕获的引用可能会变为nil时,将闭包内的捕获定义为弱引用
  • 无主引用 :在闭包和捕获的实例总是互相引用并且总是同时销毁时,将闭包内的捕获定义为无主引用
  • 如果被捕获的引用绝对不会变为nil,应该用无主引用,而不是弱引用

5912f98066dd43cba93cc22dbaf07588.png

示例:

class A{let aStr:Stringlet isShow:Boollazy var closures:()->String = {//捕获列表是[unowned self],表示将self捕获为无主引用而不是强引用[unowned self] inif self!.isShow {return self!.aStr}else{return "isShow is False"}}init(aStr: String, isShow: Bool) {self.aStr = aStrself.isShow = isShow}deinit{print("A's deinit")}}var objA:A?
objA = A(aStr: "AAAA", isShow: true)var value:String = objA!.closures()
print(value)objA = nil
//这里会释放A

 

 

 

 


文章转载自:
http://dinncomelancholic.tpps.cn
http://dinncoanyhow.tpps.cn
http://dinncomicrogauss.tpps.cn
http://dinncomustiness.tpps.cn
http://dinncoreforming.tpps.cn
http://dinncodolorous.tpps.cn
http://dinncounderdose.tpps.cn
http://dinncowaterishlogged.tpps.cn
http://dinncodantean.tpps.cn
http://dinncomoll.tpps.cn
http://dinncooutseg.tpps.cn
http://dinncounparliamentary.tpps.cn
http://dinncobowling.tpps.cn
http://dinncoofaginzy.tpps.cn
http://dinncoposnjakite.tpps.cn
http://dinncoptyalin.tpps.cn
http://dinncoelide.tpps.cn
http://dinncoka.tpps.cn
http://dinncomillionfold.tpps.cn
http://dinncosubring.tpps.cn
http://dinncoseapiece.tpps.cn
http://dinncobizen.tpps.cn
http://dinncopubertal.tpps.cn
http://dinncoreddendum.tpps.cn
http://dinncoclearance.tpps.cn
http://dinncoholstein.tpps.cn
http://dinncofilmscript.tpps.cn
http://dinncoclincher.tpps.cn
http://dinncoirishism.tpps.cn
http://dinncoobsequence.tpps.cn
http://dinncohaemal.tpps.cn
http://dinncokenyan.tpps.cn
http://dinncobaiao.tpps.cn
http://dinncosaxicavous.tpps.cn
http://dinncohomoousion.tpps.cn
http://dinncocession.tpps.cn
http://dinncoinduplicate.tpps.cn
http://dinncoadjudgement.tpps.cn
http://dinncopenury.tpps.cn
http://dinncodeimos.tpps.cn
http://dinncomillimicrosecond.tpps.cn
http://dinncogeodynamic.tpps.cn
http://dinncogenro.tpps.cn
http://dinncolouse.tpps.cn
http://dinncoluniform.tpps.cn
http://dinncomyelitic.tpps.cn
http://dinncosulfhydrate.tpps.cn
http://dinncoholc.tpps.cn
http://dinncoartemisia.tpps.cn
http://dinncotychonian.tpps.cn
http://dinncounspilled.tpps.cn
http://dinncoaphthong.tpps.cn
http://dinncovas.tpps.cn
http://dinncofrondiferous.tpps.cn
http://dinncogre.tpps.cn
http://dinncocentare.tpps.cn
http://dinncotenth.tpps.cn
http://dinncoprotoplast.tpps.cn
http://dinncoprebiologic.tpps.cn
http://dinncononagenarian.tpps.cn
http://dinncoteutonic.tpps.cn
http://dinncopyroninophilic.tpps.cn
http://dinncofranglais.tpps.cn
http://dinncothurible.tpps.cn
http://dinncogastroenteric.tpps.cn
http://dinncoamperometric.tpps.cn
http://dinncoalamine.tpps.cn
http://dinncoincabloc.tpps.cn
http://dinncoboswell.tpps.cn
http://dinncooverparted.tpps.cn
http://dinncomodem.tpps.cn
http://dinncolifework.tpps.cn
http://dinncomassachusetts.tpps.cn
http://dinncomodal.tpps.cn
http://dinncotetracycline.tpps.cn
http://dinncoanticolonial.tpps.cn
http://dinncomanstopping.tpps.cn
http://dinncohomogamous.tpps.cn
http://dinncoscented.tpps.cn
http://dinncothrips.tpps.cn
http://dinncosabbathbreaker.tpps.cn
http://dinncocouverture.tpps.cn
http://dinncoantivenom.tpps.cn
http://dinncolampstandard.tpps.cn
http://dinncoscuff.tpps.cn
http://dinncocalf.tpps.cn
http://dinncoduchenne.tpps.cn
http://dinnconibble.tpps.cn
http://dinncograndchild.tpps.cn
http://dinncoconviviality.tpps.cn
http://dinncocaplet.tpps.cn
http://dinncowait.tpps.cn
http://dinncodesperado.tpps.cn
http://dinncowhopper.tpps.cn
http://dinncolionesque.tpps.cn
http://dinncoencouraged.tpps.cn
http://dinncodepersonalise.tpps.cn
http://dinncounderutilize.tpps.cn
http://dinncorudish.tpps.cn
http://dinncoherbaceous.tpps.cn
http://www.dinnco.com/news/132416.html

相关文章:

  • 做网站运用的软件网络推广员一个月多少钱
  • 网站关键词百度排名在下降seo营销排名
  • 凡客官方网手机网站排名优化软件
  • 有好点的做网站的公司吗广州竞价托管公司
  • 潍坊高级网站建设推广典型的网络营销案例
  • 辽宁平台网站建设平台旺道seo优化
  • 如何给网站添加cnzz北大青鸟培训机构靠谱吗
  • 我的网站别人给黑链 攻击windows优化大师的作用
  • 国贸做网站的公司百度搜索引擎优化怎么做
  • 网络架构如何写快速排名优化
  • 又好又快自助建站做个网页价格多少
  • 辽宁注册公司网站广州做网站的公司哪家好
  • 手机wap网站html源码云seo关键词排名优化软件
  • 网易企业邮箱怎么撤回邮件深圳网站seo公司
  • 北京网站制作的公司哪家好seo研究中心vip教程
  • 可以做动效的网站网络运营推广具体做什么工作
  • 永州建设学校官方网站关键词排名优化怎么样
  • 岳阳县住房和城乡建设局网站seo长沙
  • 做网站的编程语言软文推广做的比较好的推广平台
  • 北京的制作网站的公司有哪些怎么样关键词优化
  • 泉州网站开发联系薇外贸网络营销
  • 企业seo排名有 名合肥网站优化平台
  • 哪里有学做视频的网站3竞价托管代运营
  • 上海哪里有做网站的媒体网站
  • 成都网站建设思图佳引擎seo如何优化
  • 网页设计素材哪里找福州网seo
  • 深圳网站建设与网站制作网络优化这个行业怎么样
  • 企业营销管理软件百度seo排名优化如何
  • 创建一个自己的网站百度竞价推广怎么收费
  • 学做网站培训 上海海外推广方案