【问题标题】:Performance of factory methods in Objective-CObjective-C 中工厂方法的性能
【发布时间】:2011-07-23 19:56:23
【问题描述】:

以下 2 个 sn-ps 代码在性能方面有什么不同吗?

NSString* str = [[NSString alloc] initWithFormat:@"%i", 10];
// Do something with |str|.
[str release];

NSAutorelasePool* pool = [[NSAutreleasePool alloc] init];
NSString* str = [NSString stringWithFormat:@"%i", 10];
// Do something with |str|.
[pool drain];

我看到有人试图建议尽可能使用工厂方法。 尽快释放对象而不是在池耗尽时释放对象不是更好吗? 我会看到第一种类型在某些情况下非常有效,例如在紧密循环中。

【问题讨论】:

    标签: objective-c memory-management nsautoreleasepool


    【解决方案1】:

    是的。第一个是更好的内存管理,如果你像你说的那样在循环中这样做是值得的,以避免在下一个池耗尽之前分配很多。

    【讨论】:

      【解决方案2】:

      我看到有人试图建议使用 可以使用工厂方法。

      我猜那是因为它基本上是一样的,但你不必记住释放对象。有人可能会说,使用便捷方法也更具可读性,尤其是因为您不必以 -release 消息序列结束每个方法。

      释放对象不是更好吗 尽快而不是什么时候 游泳池被排干了。

      您可以在某些情况下使用这种情况,例如在循环中。不过,这通常不是一个重要的考虑因素……许多方法根本不循环,只创建少数对象。

      我会看到第一种类型非常 在某些情况下有效,例如 紧环。

      当然。所以你应该知道什么时候自动释放对象,什么时候不适合自动释放对象,你应该相应地编写你的代码。但这并不意味着您应该始终尽量避免自动释放对象,就像始终尝试使用便捷方法一样。

      顺便说一句,如果您要编写多次迭代的循环,您应该考虑创建一个自动释放池。很有可能,您将在循环中使用其他方法,并且这些方法可能会创建自动释放的对象。使用您自己的池并定期排空它可以防止这些对象堆积。但是,如果您这样做,那么您不应该在循环中使用自动释放对象的想法就会大打折扣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多