3

在标题中我使用了 Objective C,但这个问题对于其他 OOP 语言也是可行的,我的问题是:下面哪个声明(示例)更有效?

1)

NSString        *urlString=@"string_literal_for_URL";
NSURL           *url         =   [NSURL urlWithString:urlString];
NSURLRequest    *request     =   [NSURLRequest requestWithURL:url                  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                              timeoutInterval:40];
NSURLConnection *connection  =   [[NSURLConnection alloc] initWithRequest:requestFromLogin 
                                                                 delegate:self];

2)

NSURLRequest *requestFromLogin = [NSURLRequest requestWithURL:[NSURL URLWithString[NSString stringWithFormat:@"http://%@:%@/ipad/login.php?username=%@&password=%@",server.text,port.text,username.text,password.text]]  
                                                  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                              timeoutInterval:40];

[[NSURLConnection alloc] initWithRequest:requestFromLogin delegate:self];

注意:据我记得CS193p Video Lectures iOS 擅长惰性实例化(据我了解,第一个示例更好),但我不确定.. 任何人都可以从 OOP 的角度给出答案。 。 提前致谢

4

2 回答 2

3

使用 ARC 编译代码并关闭优化时存在细微差别:第一个示例将增加和减少url对象上的引用计数一次。然而,当优化打开时,编译器应该能够找出在调用的初始化程序url之外没有使用该变量,并对其进行优化。NSURLRequest

于 2012-07-20T14:51:32.927 回答
2

坦率地说,这两个例子在功能上是相同的。这里唯一真正的区别是,在第一个示例中,您可以进一步重用 urlString、url 等对象,因为您可以访问它们的指针。

于 2012-07-20T14:34:45.173 回答