在以下2段代码中,性能方面是否存在差异?
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];
我看到人们试图建议尽可能使用工厂方法。 是否尽快释放对象而不是在池中耗尽时更好。 我会看到第一种类型在某些情况下非常有效,例如在紧密循环中。
答案 0 :(得分:2)
我看到有人试图建议使用 工厂方法可能。
我猜这是因为它基本上是一样的,但你不必记得发布这个对象。有些人可能会说使用便捷方法也更具可读性,特别是因为您不必使用一系列发布消息来结束每个方法。
将对象释放为不是更好 尽快而不是当 游泳池已经耗尽。
您可以在某些情况下制作该案例,例如在循环内部。这通常不是一个重要的考虑因素,但是......许多方法根本不会循环,只会创建一些对象。
我会看到第一种类型非常 在某些情况下有效,例如 紧环。
不确定。因此,您应该知道它何时以及何时不适合自动释放对象,您应该相应地编写代码。但这并不意味着你应该总是尽量避免自动释放对象,而不是总是尝试使用便利方法。
顺便说一句,如果您正在编写多次迭代的循环,您应该考虑创建一个自动释放池。有可能,你将在循环中使用其他方法,这些方法可能会创建自动释放的对象。使用您自己的池并定期排空它可以防止这些对象堆积。但是,如果你这样做,那么你就不应该在循环中使用自动释放的对象。答案 1 :(得分:0)
是的。第一个是更好的内存管理,如果你这样做是值得的,就像你说的那样,循环以避免在下一个池流失之前分配很多。