<!--
{
  "availability" : [
    "iOS: 2.0.0 -",
    "iPadOS: 2.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.0.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Foundation",
  "identifier" : "/documentation/Foundation/NSKeyedUnarchiver/decodeBytes(forKey:returnedLength:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Foundation"
    ],
    "preciseIdentifier" : "c:objc(cs)NSKeyedUnarchiver(im)decodeBytesForKey:returnedLength:"
  },
  "title" : "decodeBytes(forKey:returnedLength:)"
}
-->

# decodeBytes(forKey:returnedLength:)

Decodes a stream of bytes associated with a given key.

```
func decodeBytes(forKey key: String, returnedLength lengthp: UnsafeMutablePointer<Int>?) -> UnsafePointer<UInt8>?
```

## Parameters

`key`

A key in the archive within the current decoding scope. `key` must not be `nil`.

`lengthp`

Upon return, contains the number of bytes returned.

## Return Value

The stream of bytes associated with the key `key`. Returns `NULL` if `key` does not exist.

## Discussion

The returned value is a pointer to a temporary buffer owned by the receiver. The buffer goes away with the unarchiver, not the containing autorelease pool block. You must copy the bytes into your own buffer if you need the data to persist beyond the life of the receiver.

## See Also

[`encodeBytes(_:length:forKey:)`](/documentation/Foundation/NSKeyedArchiver/encodeBytes(_:length:forKey:))

Encodes a given number of bytes from a given C array of bytes and associates them with a key.



---

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)