iOS strong和weak联系生活中的例子

__weak 和 __strong 会出现在声明中

默认情况下,一个指针都会使用 __strong
属性,表明这是一个强引用。这意味着,只要引用存在,对象就不能被销毁。这是一种所期望的行为:当所有(强)引用都去除时,对象才能被收集和释放。

不过,
有时我们却希望禁用这种行为:一些集合类不应该增加其元素的引用,因为这会引起对象无法释放。在这种情况下,我们需要使用弱引用(不用担心,内置的集合类
就是这么干的),使用 __weak 关键字。NSHashTable 就是一个例子。当被引用的对象消失时,弱引用会自动设置为
nil。Cocoa 的 Notification Center 就是这么一个例子,虽然这已经超出纯 Objective-C
的语言范畴

自己更深理解:

1.(weak与strong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;

2.一旦最后一个指向该对象的strong类型的指针离开,这个对象将被释放,如果这个时候还有weak指针指向该对象,则会清除掉所有剩余的weak指针

类比为自己的思想:

一个对象类比为一条狗,  释放对象 类比为 狗要跑掉

逻辑:

strong类型的指针就像是栓住的狗,只要你用
绳子拴住狗,那么狗就不会跑掉.

类比 一个对象
new过以后,不会自动的释放

如果有5个人都牵着这一条狗(5条绳子栓一只狗) 类比为
5个strong类型指针指向一个对象.

除非5个绳子都脱落,否则狗是不会跑掉的,类比,5个strong指针都=nil,则该对象释放

weak型指针就像是一个小孩子指着狗喊道:“看,有一只狗在那里”,只要狗一直被拴着,那么小孩子就能看到狗
(weak指针)会一直指向它,

只要狗的绳子脱落,那么狗就会跑掉,不管有多少的小孩在看着它。

只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。

在OC中strong就相当于retain属性,而weak相当于assign。只有一种情况你需要使用weak(默认是strong),就是为了避免retain
cycles(就是父类中含有子类{父类retain了子类},子类中又调用了父类{子类又retain了父类},这样都无法release)

时间: 2024-10-26 15:24:15

iOS strong和weak联系生活中的例子的相关文章

用一个生活中的例子来说明设计原则

用生活中的例子来说明设计原则.你要不要来挑战一下 假设你开发了一个俄罗斯方块,如果你全部写在一个main方法里面,那他将非常难以维护,但是你可以一单招最基本的原则,将页面渲染和俄罗斯方块的逻辑分开,那么你就有一个 移植性很强的程序,你可以直接从pc移植到andori,成本很低,这就是单一职责带来的好处. 你会修电脑么,你会当你内存不足的时候更换内存条么,为什么各个不同厂商生产的cpu都可以被你使用,为什么电脑这么复杂的东西,你却可以进行简单的修理,而体积更小的收音机你就不行, 因为各个电脑厂商之

iOS strong与weak的使用

strong修饰的属性是强指针类型的,weak修饰的属性是弱指针类型的 ARC对于内存中的对象管理机制,当某个对象没有被强指针指向的时候,该对象就会被销毁. 所以不适当的使用strong和weak修饰属性容易造成内存泄露. OC对象(继承NSObject的类创建的对象)用strong修饰. UI控件连线的时候都会用weak修饰,给了大家一个假象.就是UI控件属性都是用weak修饰的.这种说法是错误的 当我们连线的时候,storyboard会根据图层结构分析,判断是否使用weak修饰,验证: 任何

iOS strong 和weak的形象理解(真的很精典!)

转:http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5 觉得讲的很容易理解 The difference is that an object will be deallocated as soon as there are no strong pointers to it. Even if weak pointers point to it, once the last

用生活中的例子解释java中的接口

阅读本文前置条件 需要你掌握接口和抽象类的基本定义与区别. 小例子 抽象类 一说到公司的财务人员,大家都知道他的行政职能是什么. 这个职位就是抽象类.其中那套财政处理流程就是抽象类中具体的方法. 这个抽象类(职位)并不能直接处理财务问题,只是规定了在这个职位上的人应该遵循这套办事流程. 具体类 每个职员都有各自不同的特性,比如工资差异,回家的方式等. 这个人员就是具体的类,继承自这个财务职位,但是有各自差异的方法. 这个具体类(财务人员)是直接处理财务问题,是一个可以产生活动的类(人员).其中哪

通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱

本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段时间,如果你没有任何总结,或者是不经常回顾,遗忘的速度是非常之快的. 忘记了之后,然后再重新学,因为已经间隔了一段时间,再次学习又当做了新的知识点来学.这种状态如此反复,浪费了相同的时间,但学习效果却收效甚微. 每当遇到这种情况,我们可以停下来,思考一下.对于某一个技术知识点理解起来不是那么好懂的时

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除

IOS5中strong和weak的用法

iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC) strong 用来修饰强引用的属性: @property (strong) SomeClass * aObject; 对应原来的 @property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject; weak 用来修饰弱引用的属性:@property (weak) SomeClass * aObject

【iOS开发系列】XIB IBOutlets use strong or weak ?

有人问.在ARC下,IBOutlets究竟应该定义成strong 还是 weak ?支持这个答案的人最多.答案仅是摘自官方文档的一个片段: From a practical perspective, in iOS and OS X outlets should be defined as declared properties. Outlets should generally be weak, except for those from File's Owner to top-level ob

IOS开发 strong,weak,retain,assign,copy nomatic 等的区别与作用

strong,weak,retain,assign,copy nomatic 等的区别 copy与retain:1.copy其实是建立了一个相同的对象,而retain不是:2.copy是内容拷贝,retain是指针拷贝:  3.copy是内容的拷贝 ,对于像NSString,的确是这样,但是如果copy的是一个NSArray呢?这时只是copy了指向array中相对应元素的指针.这便是所谓的"浅复制".4.copy的情况:NSString *newPt = [pt copy];此时会在