区别:使用类方法创建实例或为其指定返回值

时间:2012-10-17 15:53:54

标签: objective-c class-method

我希望这是一个简单而简短的答案的小问题; - )

(即)之间究竟有什么区别

NSData *htmlData = [NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil];

NSData *htmlData = [NSData dataWithData:[NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil]]

或者根本没有任何区别?如果重要,是的,我使用ARC。

非常感谢!

1 个答案:

答案 0 :(得分:2)

没有一个简单而简短的答案:)

首先,您处理从URL连接返回的数据。

在第二部分中,您创建了该数据的副本 - 即“复制”顺便说一句,由于多种原因,实际上可能不是深层副本。

这种表现方式实际上可以双向,而且很多都很难回答,因为:

  • a)这在很大程度上取决于您的程序如何使用该数据和
  • b)您正在使用的API的内部优化和实施细节
  • c)复制或保留对象的语义

就个人而言,当我需要传递数据时,我更喜欢后者。原因是你应该将你的ivars声明为具有可变变体的类型(在这种情况下为NSMutableData),并且你应该尽可能使用这些对象的不可变副本。一旦你的大部分实现通过复制处理这些类型的可变变体,那么你可以通过确保你处理的对象实际上是不可变的来实际 reduce 复制 - 不可变对象可以避免深度甚至浅拷贝时要求提供副本。

如果该数据不在其他地方传递,那么您可以在API返回NSMutableData的实例时避免潜在的副本(即您可以安全地使用第一个)。