在网上看到了一个很形象的比喻。 【转】
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 strong pointer is gone, the object will be deallocated, and all remaining weak pointers will be zeroed out.
Perhaps an example is in order.
Imagine our object is a dog, and that the dog wants to run away (be deallocated).
Strong pointers are like a leash on the dog. As long as you have the leash attached to the dog, the dog will not run away. If five people attach their leash to one dog, (five strong pointers to one object), then the dog will not run away until all five leashes are detached.
Weak pointers, on the other hand, are like little kids pointing at the dog and saying "Look! A dog!" As long as the dog is still on the leash, the little kids can still see the dog, and they'll still point to it. As soon as all the leashes are detached, though, the dog runs away no matter how many little kids are pointing to it.
As soon as the last strong pointer (leash) no longer points to an object, the object will be deallocated, and all weak pointers will be zeroed out.
(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。
一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
可能有个例子形容是妥当的。
想象我们的对象是一条狗,狗想要跑掉(被释放)。
strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。
weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
分享到:
相关推荐
在iOS开发中,页面间的传值是日常开发中不可或缺的一部分,尤其对于Objective-C(简称OC)的开发者来说,掌握各种传值方式能显著提高代码的灵活性和可...理解并熟练运用这些方法,能够使你在iOS开发中更加游刃有余。
Block是iOS和Mac OS X开发中的一个重要概念,它是一种内联函数或者闭包,允许开发者在代码块中封装一段可执行的代码,并且可以捕获和存储其所在上下文的变量。Block的理解对于iOS开发至关重要,因为它在多线程、事件...
在iOS开发中,Block是一种强大的特性,它允许我们在代码中定义可执行的代码块,类似于匿名函数。然而,如果不小心处理,Block可能会导致循环引用...通过实践和理解这些方法,开发者可以编写出更健壮、高效的应用程序。
- **智能指针**:使用Objective-C中的智能指针,如`__strong`、`__weak`等,可以自动管理指针的生命周期。 #### 十三、谈谈webView的作用 WebView是一种嵌入到原生应用中的Web视图组件,可以用来加载和显示网页内容...
2. 强引用(Strong)、弱引用(Weak)和无主引用(Unowned):理解这三种引用类型及其在防止循环引用中的作用。 3. ARC的工作原理:理解ARC如何自动管理引用计数,以及在何时、如何插入release和retain指令。 三、...
内存管理是iOS开发中的重要部分,面试官可能会询问ARC(Automatic Reference Counting)的工作原理、强引用循环(Strong Reference Cycle)及其解决方法,以及弱引用(Weak Reference)和无主引用(Unowned ...
以上是iOS Objective-C面试中常见的知识点,深入理解这些概念和技术对于iOS开发者来说至关重要。在实际面试中,可能还会涉及更多如Block、KVC/KVO、Notification、Category、Protocol、内存泄漏检测、性能优化等方面...
### 2018 iOS面试题汇总解析 #### 一、设计模式的理解及常见类型 设计模式是指在软件开发过程...以上总结了2018年iOS面试题中涉及的一些核心知识点,希望能够帮助开发者更好地理解和掌握iOS开发中的重要概念和技术。
【Objective-C基础知识II-入门项目(提示)】是针对初学者设计的一个iOS开发教程,旨在深化对Objective-C语言的理解。Objective-C是Apple的Cocoa框架和iOS SDK的基础,是开发iPhone、iPad应用的重要语言。本项目将...
在ARC中,有两种主要类型的引用:强引用(strong reference)和弱引用(weak reference)。强引用是默认的引用类型,保持对象的生命周期,直到没有其他强引用指向它。弱引用不增加对象的引用计数,当对象的强引用...
- `Block_object_assign`函数会根据`auto`变量的修饰符(`__strong`、`__weak`、`__unsafe_unretained`)做出相应的操作,例如形成强引用或弱引用。 **3. 如果Block从堆上移除:** - 调用Block内部的`dispose`函数...
在iOS开发中,创建一个高仿系统级别的计算器应用是一个经典的练习,这可以帮助开发者深入理解Objective-C编程语言以及iOS界面设计。本项目名为"iOS 高仿系统计算机",旨在模仿苹果设备上的原生计算器应用,提供类似...
在实际编程中,理解并恰当使用strong和weak引用对于优化内存管理、防止内存泄漏和应用崩溃至关重要。正确处理对象的生命周期和所有权关系是iOS开发中的基础技能,也是写出高效、稳定代码的关键。
- weak/strong引用:避免循环引用,`weak`指针不会增加对象引用计数,`strong`则会。 3. **Runtime**: - 动态性:Objective-C运行时可以在运行期动态修改类、方法等,实现动态绑定和消息转发。 - 方法选择器...
### iOS 5 ARC指南知识点详解 #### 自动引用计数(ARC)介绍 ...通过对Strong和Weak指针的理解,以及合理使用Xcode提供的工具,开发者可以更高效地开发出高质量的应用程序,同时减少内存泄漏和其他内存管理方面的问题。
通过深入理解其核心概念和应用场景,开发者可以在iOS 5及以上版本的开发工作中更加高效地工作,同时避免常见的内存泄漏和其他问题。此外,熟悉ARC的高级特性也有助于编写更加健壮和高效的代码。
### iOS面试核心知识点详解 #### 一、多线程与并发技术 - **NSOperation与GCD的基础原理**: ...通过深入理解和掌握以上知识点,开发者不仅能在iOS面试中表现出色,还能在实际工作中更加游刃有余。
iOS开发笔试题600道包含了大量关于Objective-C编程语言的知识点,由于提供的部分内容中含有扫描错误,这里...通过这些知识点,开发者可以更好地理解iOS开发中的属性管理、代理模式,以及如何在项目中包含必要的头文件。
- 引用计数(ARC):Objective-C中的自动引用计数如何工作,了解strong、weak、unowned等修饰符。 - 内存区域:栈、堆和常量区的区别。 3. **KVC(Key-Value Coding)与KVO(Key-Value Observing)**: - KVC...
在本篇2018最新iOS面试题中,主要...综合以上所述,这份面试题考察了应聘者对Objective-C语言和iOS开发的深刻理解,特别是在内存管理和ARC技术上。掌握这些内容对于任何希望在iOS平台开发的开发者来说是必不可少的。