【问题标题】:Is garbage collection supported for iPhone applications?iPhone 应用程序是否支持垃圾收集?
【发布时间】:2010-09-29 18:55:59
【问题描述】:

iPhone 是否支持垃圾回收?如果是这样,那么执行使用+alloc-init 组合执行的操作的替代方法是什么:

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:xmlData];
UIImage *originalImage = [[UIImage alloc] initWithData:data];
detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailView bundle:[NSBundle mainBundle]] autorelease];

... 和其他命令。提前感谢您提供的任何帮助或指导。

【问题讨论】:

    标签: iphone objective-c cocoa-touch ios garbage-collection


    【解决方案1】:

    没有。垃圾收集对于设备上有限的电池寿命等来说开销太大。

    您必须始终牢记alloc/release 模式进行编程。

    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:xmlData];
    ...
    [xmlParser release];
    

    或(不适合所有情况)

    NSXMLParser *xmlParser [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
    

    希望这会有所帮助!

    【讨论】:

    • 如果说电池续航是iPhone没有GC的原因之一,那么Android为什么会有Garbage Collector呢?请参阅:developer.android.com/reference/java/lang/System.html#gc%28%29。您是否介意引用说明电池寿命是 iPhone 没有 GC 的原因之一的来源?谢谢。
    • iPhone OS 由 Apple 制造,Android OS 由 Google 制造。这是常识,持续运行的垃圾收集进程将消耗额外的处理能力,从电池中汲取更多电力。所有 iPhone 为节省电池电量而做出的选择在 Android 中都被忽略了,因此 Android 手机的电池寿命比 iPhone 差。
    • 就像亚当说的那样,大多数安卓手机的电池寿命都很糟糕。我的朋友有一个机器人,他几乎不能在上面做任何事情,而不会严重耗尽电池。
    • 那么随着 iPhone 变得更强大、内存更大、电池寿命更长,你认为垃圾回收会重新开始吗?
    • 我认为苹果关于电池寿命的论点充其量是微不足道的。当然,GC 是一种开销,但无论如何与手机上运行的数十亿个其他东西相比,它根本算不上什么。诚然,所有优秀的 iOS 程序员都熟悉 Cocoa 内存管理模型,但事实上,远非所有 iOS 程序员都是优秀的。如果没有像 GC 这样的安全网,我们最终会导致大量糟糕的应用程序崩溃,App Store 中到处都是。所以恕我直言,苹果应该为了他们的用户而包含 GC,尤其是。 CPU 和电池寿命一直在提高。
    【解决方案2】:

    不,iPhone 目前不支持垃圾回收。你需要使用alloc/release/autorelease

    【讨论】:

      【解决方案3】:

      请注意,缺少垃圾回收意味着也不支持弱引用。

      【讨论】:

      • 你介意举一个例子,说明我们在没有弱引用(或至少一个链接)的情况下缺少什么吗?
      • 这个问题就是一个很好的例子:stackoverflow.com/questions/735551/… 想象一个哈希映射,它所持有的任何东西都可以被释放然后被遗忘——所以你不会过度保留引用,但不必担心存储在字典中的无效指针。
      【解决方案4】:

      Mono touch 具有垃圾收集功能并在 iPhone 操作系统上运行。

      【讨论】:

      • 单点触控应用程序是用 C# 编写的,最终编译为 Objective-C。在特殊编译期间的某个时刻,插入了对象的内存管理。我假设。我只能推测,但我会公开表示这可能对内存效率不利。
      • 值得记住这个无意中听到的不会比 c# 或其他内存管理语言(java 等)差。它有它的目的,这就是我想要表达的观点:)
      【解决方案5】:

      在整个讨论中没有人谈论 Java 语言,在 Java 中,垃圾收集是内置在该语言中的,因此它在 Android、J2ME 和 Blackberry 中隐式可用:),而在 Objective-C 中它是可选的,所以在 iPhone 中 GC 不可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        相关资源
        最近更新 更多