<!--
{
  "availability" : [
    "iOS: 2.0.0 -",
    "iPadOS: 2.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.2.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Foundation",
  "identifier" : "/documentation/Foundation/NSURLConnection",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Foundation"
    ],
    "preciseIdentifier" : "c:objc(cs)NSURLConnection"
  },
  "title" : "NSURLConnection"
}
-->

# NSURLConnection

An object that enables you to start and stop URL requests.

```
class NSURLConnection
```

## Overview> Important:
> This API is considered legacy. Use ``doc://com.apple.foundation/documentation/Foundation/URLSession`` instead.

An `NSURLConnection` object lets you load the contents of a URL by providing a URL request object. The interface for `NSURLConnection` is sparse, providing only the controls to start and cancel asynchronous loads of a URL request. You perform most of your configuration on the URL request object itself.

> Note:
> Although instances of this class are commonly called “connections”, there is not a 1:1 correlation between these objects and the underlying network connections.

The `NSURLConnection` class provides convenience class methods to load URL requests both asynchronously using a callback block and synchronously.

For greater control, you can create a URL connection object with a delegate object that conforms to the [`NSURLConnectionDelegate`](/documentation/Foundation/NSURLConnectionDelegate) and [`NSURLConnectionDataDelegate`](/documentation/Foundation/NSURLConnectionDataDelegate) protocols. The connection calls methods on that delegate to provide you with progress and status as the URL request is loaded asynchronously. The connection also calls delegate methods to let you override the connection’s default behavior (for example, specifying how a particular redirect should be handled). These delegate methods are called on the thread that initiated the asynchronous load operation.

> Note:
> During a request, the connection maintains a strong reference to its delegate. It releases that strong reference when the connection finishes loading, fails, or is canceled.

For more information about errors, see the `NSURLError.h` header, [Foundation Constants](/documentation/Foundation/foundation-constants), and URL Loading System Error Codes in [Error Handling Programming Guide](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40001806).

### NSURLConnection Protocols

The `NSURLConnection` class works in tandem with three formal protocols: [`NSURLConnectionDelegate`](/documentation/Foundation/NSURLConnectionDelegate), [`NSURLConnectionDataDelegate`](/documentation/Foundation/NSURLConnectionDataDelegate), and [`NSURLConnectionDownloadDelegate`](/documentation/Foundation/NSURLConnectionDownloadDelegate). To use these protocols, you write a class that conforms to them and implement any methods that are appropriate, then provide an instance of that class as the delegate when you create a connection object.

The [`NSURLConnectionDelegate`](/documentation/Foundation/NSURLConnectionDelegate) protocol is primarily used for credential handling, but also handles connection completion. Because it handles connection failure during data transfers, all connection delegates must typically implement this protocol.

In addition, unless you’re using Newsstand Kit, your delegate must also conform to the [`NSURLConnectionDataDelegate`](/documentation/Foundation/NSURLConnectionDataDelegate) protocol, because this protocol provides methods that the `NSURLConnection` class calls with progress information during an upload, with fragments of the response data during a download, and to provide a new upload body stream if the server’s response necessitates a second connection attempt—for example, if `NSURLConnection` must retry the request with different credentials.

Finally, if you’re using Newsstand Kit, your delegate can conform to the [`NSURLConnectionDownloadDelegate`](/documentation/Foundation/NSURLConnectionDownloadDelegate) protocol. This protocol provides support for continuing interrupted file downloads and receiving a notification whenever a download finishes. This protocol is solely for use with `NSURLConnection` objects created using Newsstand Kit’s `download(with:)` method.

> Note:
> Some methods in these protocols were previously part of other formal protocols or were previously part of an informal protocol on `NSObject`.

## Topics

### Preflighting a Connection Request

[`canHandle(_:)`](/documentation/Foundation/NSURLConnection/canHandle(_:))

Returns whether a request can be handled based on a preflight evaluation.

### Connection URL Information

[`originalRequest`](/documentation/Foundation/NSURLConnection/originalRequest)

A deep copy of the original connection request.

[`currentRequest`](/documentation/Foundation/NSURLConnection/currentRequest)

The current connection request.

### Loading Data Synchronously

[`sendSynchronousRequest(_:returning:)`](/documentation/Foundation/NSURLConnection/sendSynchronousRequest(_:returning:))

Performs a synchronous load of the specified URL request.

### Loading Data Asynchronously

[`connectionWithRequest:delegate:`](/documentation/Foundation/NSURLConnection/connectionWithRequest:delegate:)

Creates and returns an initialized URL connection and begins to load the data for the URL request.

[`init(request:delegate:)`](/documentation/Foundation/NSURLConnection/init(request:delegate:))

Returns an initialized URL connection and begins to load the data for the URL request.

[`init(request:delegate:startImmediately:)`](/documentation/Foundation/NSURLConnection/init(request:delegate:startImmediately:))

Returns an initialized URL connection and begins to load the data for the URL request, if specified.

[`sendAsynchronousRequest(_:queue:completionHandler:)`](/documentation/Foundation/NSURLConnection/sendAsynchronousRequest(_:queue:completionHandler:))

Loads the data for a URL request and executes a handler block on an operation queue when the request completes or fails.

[`start()`](/documentation/Foundation/NSURLConnection/start())

Causes the connection to begin loading data, if it has not already.

### Stopping a Connection

[`cancel()`](/documentation/Foundation/NSURLConnection/cancel())

Cancels an asynchronous load of a request.

### Scheduling Delegate Method Calls

[`schedule(in:forMode:)`](/documentation/Foundation/NSURLConnection/schedule(in:forMode:))

Determines the run loop and mode that the connection uses to call methods on its delegate.

[`setDelegateQueue(_:)`](/documentation/Foundation/NSURLConnection/setDelegateQueue(_:))

Determines the operation queue that is used to call methods on the connection’s delegate.

[`unschedule(from:forMode:)`](/documentation/Foundation/NSURLConnection/unschedule(from:forMode:))

Causes the connection to stop calling delegate methods in the specified run loop and mode.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)