从iOS 5开始,我是否不再需要担心内存管理?此外,所有为iOS 4及更早版本编写的程序是否都需要重新编写,以便让iOS代替你管理内存?
从iOS 5开始,我是否不再需要担心内存管理?此外,所有为iOS 4及更早版本编写的程序是否都需要重新编写,以便让iOS代替你管理内存?
您似乎在谈论其他答案提到的自动引用计数(ARC)。 ARC是一种垃圾回收机制,它可以自动释放内存,但与良好的垃圾回收器有许多不同之处。
首先,它主要是一项编译技术。编译器了解Cocoa的引用计数指南,因此根据规则插入保留和释放操作。它的工作方式就像您自己编写了保留和释放操作一样 - 它只是为您插入这些操作。正常垃圾回收器在程序运行时跟踪程序的内存。
其次,由于它就像保留和释放一样,所以它不能捕获保留循环(如果对象A保留对象B并且对象B保留对象A,而没有其他任何内容引用它们中的任何一个,则它们都将变得不可回收)。您需要采取相同的预防措施来防止它们。
它还使用与自动垃圾回收器不同的资源。 Objective-C使用的垃圾回收器必须扫描未引用的内存并对其进行回收 - 这很昂贵,并且可能会在较慢的系统上导致“卡顿”,但它们只需要偶尔执行此操作,并且理论上甚至可以微调它们的回收周期以匹配程序实际使用其内存的方式。总的来说,垃圾回收程序将比非垃圾回收程序使用更多的内存,并且在GC决定进行回收时会显着减慢速度。另一方面,ARC将“扫描”移动到编译时,并尽快释放可用的内存,但必须不断更新对象引用计数,而不是像收集器那样等待垃圾堆积。
weak
来声明未保留(unretained)的属性,而不是assign
。至于在setter方法中使用retain
:ARC模式下,显式发送retain
、release
或autorelease
是非法的。你只需要进行赋值操作,编译器会在必要时插入保留和释放操作。 - Chuck这是一个编译器特性;不是操作系统特性,所以我不明白为什么它不能在旧版本上工作。自动引用计数 (ARC)
Objective-C 的自动引用计数 (ARC) 功能使内存管理成为编译器的职责。通过使用新的 Apple LLVM 编译器启用 ARC,您将永远不需要再输入 retain 或 release,从而大大简化了开发过程,同时减少了崩溃和内存泄漏。编译器完全了解您的对象,并在其不再使用时立即释放每个对象,因此应用程序以与以往一样快速、可预测且流畅的性能运行。
自动引用计数(ARC)实现了Objective-C对象和块的自动内存管理,使程序员免于需要显式插入保留和释放操作。
您将不再担心内存管理。有关此主题的公共信息可供使用:
如果规范太严格难以阅读,在简短地说,您需要编辑保留/释放代码以使用ARC,但旧程序仍然兼容。您不应该混合使用两者。