Ios 如何正确进行NSURLConnection调用?

Ios 如何正确进行NSURLConnection调用?,ios,objective-c,nsurlconnection,Ios,Objective C,Nsurlconnection,我开始研究iOS的网络编程。我在学习一个教程,因为收到了一个“变量从未使用过”的警告而停了下来。我发现另一个教程处理它的方式不同,但它也创建了一个警告。然后,我决定检查一下苹果的示例代码,结果发现他们也用另一种方式来做 教程1: 教程2: 苹果公司: 苹果的方法消除了警告,但分配给一个永远不会被读取的变量似乎有点浪费。这是最佳实践吗?变量不会“永远”使用 connectionWithRequest:delegate:实际上不会启动任何网络。在实际启动连接之前,必须对变量调用start方法。

我开始研究iOS的网络编程。我在学习一个教程,因为收到了一个“变量从未使用过”的警告而停了下来。我发现另一个教程处理它的方式不同,但它也创建了一个警告。然后,我决定检查一下苹果的示例代码,结果发现他们也用另一种方式来做

教程1:

教程2:

苹果公司:

苹果的方法消除了警告,但分配给一个永远不会被读取的变量似乎有点浪费。这是最佳实践吗?

变量不会“永远”使用

connectionWithRequest:delegate:
实际上不会启动任何网络。在实际启动连接之前,必须对变量调用
start
方法。启动后,您可以调用变量上的
cancel
方法来停止连接


编辑:根据Rob的评论,
connectionWithRequest:
和大多数NSURLConnection实例化方法实际上启动了请求。如果您想
取消
,仍然会返回该变量(您可能还可以使用它执行其他操作)

但是,如果您在启动连接后不想对变量执行任何操作,那么还有其他方法可以创建连接。我将在中编辑它们

您可以使用
sendAsynchronousRequest:queue:completionHandler:
,它返回void

对于这个方法,您发送请求参数,并为连接提供一个要处理的队列和一个在连接完成时执行的块

您也可以按照Rob的建议进行操作,只是不要将返回值放在任何地方:

[NSURLConnection connectionWithRequest:request delegate:self];
如果出于任何原因,你也不喜欢这样,你可以这样做:

@autoreleasepool {
    NSURLConnection *foo = [NSURLConnection connectionWithRequest:request delegate:self];
#pragma unused(foo)
}
我想,在编译过程中,它会得到优化,直接到前面的示例:

[NSURLConnection connectionWithRequest:request delegate:self];

请注意,
#pragma unused(someVar)
将抑制给定变量的未使用变量警告。

如果不需要
NSURLConnection
变量,只需执行以下操作:

[NSURLConnection connectionWithRequest:request delegate:self];
这可以防止您在问题中描述的编译器警告

如果您希望能够在以后取消请求(例如,用户在连接进行时解除视图控制器),则您可以将
NSURLConnection
保存在属性中,然后您可以在解除视图控制器时取消请求


否则,上面显示的语法将在没有变量和编译器警告的情况下启动连接。

connectionWithRequest
会启动连接。您不必(也不应该)
启动连接。我没有遇到过希望取消发送的请求的情况,但我会记住,我需要保存连接变量。感谢您提供所有备选方案。您可以在声明变量时使用
\uuuu unused
\uuu unused NSURLConnection*foo
这消除了警告,谢谢!现在我注意到,这些教程是一年前和两年前的。这种方法看起来也比其他方法更干净。如果你只是针对iOS 7,使用它,或者直接使用它。即使你的目标不仅仅是iOS 7,我还是建议你使用
AFNetworking
,这样就不需要很多锅炉板代码。我需要支持iOS 6,否则我会像你建议的那样使用
NSURLSession
。不幸的是,我不允许为这个项目使用任何第三方库。我很想使用
AFNetworking
!非常感谢。
@autoreleasepool {
    NSURLConnection *foo = [NSURLConnection connectionWithRequest:request delegate:self];
#pragma unused(foo)
}
[NSURLConnection connectionWithRequest:request delegate:self];
[NSURLConnection connectionWithRequest:request delegate:self];