有一个所有者持有强引用,那么该对象就会保持存活状态。对象的所有权通过引用计数来跟踪,每当有新的强引用创建时,对象的引用计数增加;当引用失效时,引用计数减少。当对象的引用计数变为零时,表明没有对象需要它,系统会自动释放该对象的内存。
2)ARC(Automatic Reference Counting,自动引用计数)与MRC(Manual Reference Counting,手动引用计数)
OC中,内存管理有两种模式:ARC和MRC。ARC是iOS 4.0之后引入的,它自动处理对象的引用计数,程序员不再需要显式地调用retain、release和autorelease方法。而在早期的iOS或在特定情况下,MRC是主要的内存管理方式,需要程序员手动管理对象的生命周期。
2、内存管理的分类
1)强引用(Strong):默认的引用类型,持有对象并增加其引用计数,直到设置为nil才会释放对象。
2)弱引用(Weak):不增加对象的引用计数,当对象的强引用计数变为零时,弱引用也会失效。
3)无主引用(Unowned):类似于弱引用,但用于表示对象间的生命周期关联,通常用于类的关联属性中,如UIViewController与其view的关系。
4)自动释放池(Autorelease Pool):在autoreleasepool中创建的对象,会在当前autoreleasepool的生命周期结束时释放,主要用于临时对象的管理,尤其是在循环中创建大量临时对象的情况。
OC中的内存管理遵循“谁创建,谁负责”和“谁持有,谁释放”的原则,即“ownership rule”。正确使用这些引用类型和管理内存是避免内存泄漏和意外释放的关键。
NSString是OC中的基础类,用于处理文本,它在内存管理中扮演重要角色。在讲解NSString时,可能会涉及字符串的常量性、可变性以及如何正确管理NSString对象的内存,例如使用+stringWithFormat:创建的字符串和使用@""创建的字符串在内存管理上的区别。
此外,"copy"关键字在OC中的使用也是一个重要的知识点。它涉及到深拷贝和浅拷贝的概念。对于实现NSCopying协议的对象,copy方法会创建一个新的对象,拥有原始对象的值。对于集合类,如NSArray、NSDictionary,浅拷贝只会复制容器本身,而不会复制容器内的对象;深拷贝则会递归复制容器内的所有对象。
这个"OC语言疯狂讲义(下)"涵盖了OC语言的基础知识,包括但不限于内存管理、字符串操作、引用类型的理解以及对象生命周期的控制。对于初学者来说,这是一个很好的入门资料,可以帮助他们快速理解OC编程的核心概念。