成都创新互联网站制作重庆分公司

ios开发weak ios开发webview失焦

iOS开发中的循环引用

修饰对象不会增加其引用计数,避免了循环引用。 如果被修饰的对象在某一时机被释放,会产生 悬垂指针 ,再通过这个指针去访问原对象的话,会导致内存泄露,所以一般不建议用,__unsafe_unretained去解除循环引用。

成都创新互联公司专业为企业提供莱西网站建设、莱西做网站、莱西网站设计、莱西网站制作等企业网站建设、网页设计与制作、莱西企业网站模板建站服务,十余年莱西做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

造成循环引用的原因,就是两个及两个以上的对象相互强引用,无法释放。

在iOS开发中,循环引用常常发生在使用Block、Delegate和通知等机制时。为了避免循环引用,可以使用weak、strong和copy等关键字来修饰对象,明确表达对象之间的拥有关系。

循环引用是iOS开发中经常遇到的问题,它指的是两个或多个对象通过相互之间的强引用,形成了一个保留环,即使已经没有外部对象持有,也无法对其进行释放操作,也无法释放其占用的内存空间(引用计数器始终大于0)。

iOS-底层原理26:weak原理

weak 是弱引用, 用weak来修饰、描述所引用对象的计数器并不会加1, 而且weak会在引用对象被释放的时候自动置为nil, 这也就避免了野指针访问坏内存而引起崩溃的情况,weak也可以解决循环引用。

weak是OC中用于打破对象间的循环引用的一种技术。 weak 修饰一个变量时,表示该指针变量可以使用但不拥有该对象;及 weak 引用指向对象时,对象的引用计数并不增加。

weak原理 Runtime 维护了一个 weak表,用于存储指向某个对象的所有weak指针。weak表 其实是一个 hash(哈希)表,Key 是所指对象的地址,Value是 weak指针 的地址(这个地址的值是所指对象指针的地址)数组。

weak weak只能用来修饰对象,但是并不持有,引用计数不会+1。在Runtime中对该属性进行了操作,指向的内存被释放后(引用计数为0),指针就会自动=nil,多用于避免循环引用的地方。

weak_table_t 是全局的弱引用表,将对象id存储为键,将 weak_entry_t 存储为它们的值。在我们的App中,多个对象会重用同一个 SideTable 节点,也就是说, weak_table 会存储多个对象的弱引用信息。

关于iOS基本属性修饰符的理解(weak篇)

1、assign assign主要用来修饰基本数据类型,例如int,float,NSInteger,CGFloat,储存在栈中内存不需要管理,一般不修饰对象,不然对象内存地址被释放,但是指针不会释放就会造成野指针。

2、报错原因:如果我们用 weak 修饰,虽然进行了赋值或者初始化操作,但是引用计数器是不会加一的,当出了作用域,对象就会销毁,指针置空,这样我们所持有的属性(对象)就是野指针。

3、weak_table_t 是全局的弱引用表,将对象id存储为键,将 weak_entry_t 存储为它们的值。在我们的App中,多个对象会重用同一个 SideTable 节点,也就是说, weak_table 会存储多个对象的弱引用信息。

4、Weak+Controller是一种模式设计模式,简称WC模式。主要用于分离组件操作逻辑和组件控制逻辑。其中Weak表示要访问的操作逻辑组件,它不会调用任何其它的代码。

5、__weak一般用在delegate关系中防止循环引用或者用来修饰指向由Interface Builder编辑与生成的UI控件。__autoreleasing 表示在autorelease pool中自动释放对象的引用,和MRC时代autorelease的用法相同。

6、读写性修饰符:readwrite readonlyreadwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法。


分享标题:ios开发weak ios开发webview失焦
文章路径:http://cxhlcq.com/article/dgjoope.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部