iOS 5是否有垃圾回收?
我不再需要担心iOS 5以后的内存pipe理吗? 另外,为iOS 4和更早版本编写的所有程序是否必须重写以允许iOS为您pipe理内存?
你似乎在谈论自动引用计数,在其他答案中提到。 ARC是一种GC,它可以自动释放内存,但与好的垃圾收集器有许多不同。
首先,它主要是编译器技术。 编译器知道Cocoa的引用计数准则,所以它根据规则插入保留和释放。 它的工作原理就像是你自己编写了保留和释放 – 它只是为你插入。 正常的垃圾收集器在运行时跟踪程序的内存。
其次,因为它就像保留和释放,所以它不能捕获保留周期(如果对象A保留对象B,而对象B保留对象A,而没有其他引用它们中的任何一个,则它们都变成不朽)。 您需要采取相同的预防措施来防止它们。
它也使用不同于自动垃圾收集器的资源。 与Objective-C一起使用的垃圾收集器必须扫描未被引用的内存并收集它 – 这是昂贵的,并且可能导致在较慢的系统上“口吃” – 但是它们偶尔只需要这样做,理论上甚至可以微调他们的收集周期,以配合一个程序如何实际使用它的记忆。 一般来说,GC程序将比非GC程序使用更多的内存,当GC决定收集时会显着减慢。 另一方面,ARC会将“扫描”移动到编译时间并尽快释放内存,但它必须不断更新对象引用计数,而不是像收集器一样等待垃圾build立。
在苹果的公共iOS 5页面上 ,他们表示:
自动引用计数
Objective-C的自动引用计数(ARC)使内存pipe理成为编译器的工作。 通过在新的Apple LLVM编译器中启用ARC,您将永远不需要键入retain或release,从而大大简化了开发过程,同时减less了崩溃和内存泄漏。 编译器对你的对象有一个完整的理解,并在每一个对象不再被使用的时候释放它,所以应用程序运行的速度和以前一样快,可预测,平滑的性能。
这是一个编译器function; 不是一个操作系统的function,所以我不明白为什么它不适用于旧版本。
自动引用计数实现了对Objective-C对象和块的自动内存pipe理,使程序员不必显式插入保留和释放。
你会less担心内存pipe理。 有关于这个问题的公共信息:
- ARC取代GC? (lists.apple.com)
- 自动引用计数 (clang.llvm.org)。 这是ARC的技术规格。
如果规范太苛刻无法阅读,简而言之,您将需要编辑保留/释放代码来使用ARC,但旧程序保持兼容。 你不应该做的是混合两者。
- 将CLLocationCoordinate2D存储到NSUserDefaults
- CoreBluetooth:无法findiPad
- Facebook的FBSDKLoginManager / logInWithReadPermissions Swift示例不使用分析
- Operation_failed:当我在iTunesConnect中为内部测试选择新版本时
- 是否可以在同一个IOS应用程序中使用多个Flurry API密钥
- SDWebImage UIImageView + WebCache在64位设备上崩溃
- Phonegap iOS:下载图片到照片库
- 在解散视图的同时传递数据
- 为iOS编译arm64和x86_64的Libical