Generated by GPT-5-mini| NSArray | |
|---|---|
| Name | NSArray |
| Developer | Apple Inc. |
| Written in | Objective-C |
| First appeared | 1994 |
| Platform | macOS, iOS, watchOS, tvOS |
| License | Proprietary |
NSArray
NSArray is an immutable ordered collection class originating in NeXTSTEP and later incorporated into Cocoa by Apple Inc. for use on macOS and iOS. It provides indexed storage and retrieval for Objective‑C objects and interoperates with frameworks such as Foundation (Apple), UIKit, AppKit, and Core Data. NSArray is foundational to many APIs in Xcode projects and is commonly used alongside types from Swift (programming language) and Grand Central Dispatch.
NSArray represents an ordered, immutable sequence of Objective‑C object pointers maintained by the Foundation (Apple) framework and used across Cocoa and Cocoa Touch APIs. It complements mutable counterparts and bridges to Swift as Array (Swift) when using Objective-C/Swift (programming language) interoperability in Xcode. NSArray instances are typically accessed by index and support enumeration protocols used by NSFastEnumeration and block‑based iteration patterns found in Blocks (C language extension).
NSArray objects can be created via literal syntax in Objective-C with @[] or via initializers provided by Foundation (Apple), such as initWithObjects:. Common factory methods include arrayWithObjects:, arrayWithArray:, and array. Literals and factory methods are often used within Xcode project templates and sample code distributed by Apple Developer documentation. Bridging to Swift arrays occurs automatically when using bridging headers in CocoaPods or Swift Package Manager managed projects.
Because NSArray is immutable, element access is provided by methods such as objectAtIndex:, firstObject, lastObject, and subarrayWithRange:. Enumeration patterns include fast enumeration supported by NSFastEnumeration and block enumeration using enumerateObjectsUsingBlock:, enabling integration with UIKit table view data sources and Foundation (Apple) utilities. To modify elements, developers use mutable counterparts such as NSMutableArray or construct new NSArray instances via arrayByAddingObject: and arrayByAddingObjectsFromArray:, often in contexts like Core Data result processing or CloudKit payload assembly.
NSArray participates in both manual retain–release and automatic reference counting models, requiring correct ownership semantics when interfacing with older Objective-C codebases or migrating to ARC. With the introduction of Automatic Reference Counting by Apple Inc., retain/release bookkeeping for NSArray is largely handled by the compiler; manual memory management patterns remain relevant when maintaining legacy NeXTSTEP or early macOS code. For mutable operations, NSMutableArray instances manage dynamic storage and require attention to thread safety when used with concurrency technologies like Grand Central Dispatch or NSOperationQueue.
NSArray offers O(1) indexed access and O(n) search for linear scans; methods that create new arrays (for example, arrayByAddingObject:) require allocation proportional to the number of elements and therefore have O(n) cost. Copying behavior depends on the mutability of the receiver and can involve shallow or deep copy semantics when combined with NSCopying conforming objects. Performance considerations arise in high‑throughput environments like SpriteKit rendering loops, Metal pipelines, and large dataset transformations in Core Data fetches; developers often prefer low‑allocation patterns used in Swift (programming language) or C arrays for tight loops.
NSArray is commonly used to represent fixed collections such as ordered results from Core Data fetchRequests, table view model arrays in UIKit, menu items in AppKit applications, and configuration lists loaded from Property List files. Design patterns include immutable public APIs returning NSArray while exposing NSMutableArray internally (copy‑on‑write strategies), bridging with Swift (programming language) using NSArray<__kindof id> generics, and employing block‑based enumeration with Grand Central Dispatch for concurrent reads in iOS apps. Integration points include serialization via NSJSONSerialization, interoperation with NSUserDefaults, and payload assembly for CloudKit or NSURLSession network requests.
NSArray originated in NeXTSTEP and was brought into macOS and iOS by Apple Inc. as part of the Foundation (Apple) framework. Over time it has received enhancements: literal syntax, subscripting, lightweight generics, and improved bridging with Swift (programming language) introduced across Xcode and LLVM toolchain releases. Compatibility considerations include differences between manual retain–release era APIs and ARC, evolution of APIs in iOS SDK releases, and best practices updated in Apple Developer documentation for modern macOS and iOS development.
Category:Objective-C classes