Objective-C first appeared around 1984, created by Brad Cox and Tom Love at a small company called Productivity Products International. The account of how Brad Cox built Objective-C on Smalltalk ideas is simple to state: take the C language exactly as it is, and add a thin layer of Smalltalk-style objects and message sending on top. That small, pragmatic design later became the foundation of NeXTSTEP, Mac OS X and iOS.
How Brad Cox built Objective-C on Smalltalk ideas
In the early 1980s Cox and Love had both worked at ITT and been impressed by Smalltalk-80, the language and environment from Xerox PARC. Smalltalk was elegant but slow on ordinary hardware and lived in its own closed world. Cox wanted object-oriented programming that could work with existing C code, compilers and libraries.
His first version was a preprocessor that translated the new syntax into plain C. Cox called his central idea the Software-IC: reusable binary components that could be plugged together like integrated circuits. He described the language and the philosophy in his 1986 book Object-Oriented Programming: An Evolutionary Approach. PPI, later renamed Stepstone, sold the compiler and class libraries.
NeXT, Apple and the road to iOS
In 1988 Steve Jobs's company NeXT licensed Objective-C and built its NeXTSTEP operating system and frameworks around it. NeXT extended the GCC compiler to support Objective-C; after discussion with the Free Software Foundation about the GPL, the front-end changes were released as free software. Tim Berners-Lee wrote WorldWideWeb, the first web browser, on a NeXT computer in 1990, and id Software built its level editors for Doom on NeXTSTEP.
When Apple bought NeXT in 1997, NeXTSTEP became the core of Mac OS X, released in 2001, and its frameworks became Cocoa. In 2008 the iPhone SDK opened Cocoa Touch to outside developers, and Objective-C suddenly became one of the most in-demand languages in the world.
| Year | Milestone |
|---|---|
| around 1984 | Objective-C created at PPI |
| 1988 | NeXT licenses Objective-C |
| 2001 | Mac OS X ships with Cocoa |
| 2007 | Objective-C 2.0: properties, fast enumeration, optional garbage collection |
| 2008 | iPhone SDK released |
| 2009 | Blocks (closures) added |
| 2011 | Automatic Reference Counting (ARC) |
| 2014 | Apple introduces Swift |
Design and key features
- A strict superset of C: any valid C program is valid Objective-C, so existing C libraries work unchanged.
- Message passing:
[object message:argument]sends a message that is resolved at runtime, as in Smalltalk, rather than calling a fixed function. - Dynamic runtime: classes can be inspected and modified while the program runs, and
idcan hold any object. - Categories add methods to existing classes without subclassing.
- Protocols declare sets of methods a class promises to implement, an idea Java later adopted as interfaces.
- Named arguments woven into the method name, which makes calls long but readable.
#import <Foundation/Foundation.h>
@interface Greeter : NSObject
@property (nonatomic, copy) NSString *name;
- (NSString *)greetingForHour:(NSInteger)hour;
@end
@implementation Greeter
- (NSString *)greetingForHour:(NSInteger)hour {
NSString *part = hour < 12 ? @"morning" : @"afternoon";
return [NSString stringWithFormat:@"Good %@, %@", part, self.name];
}
@end
int main(void) {
@autoreleasepool {
Greeter *g = [[Greeter alloc] init];
g.name = @"Ada";
NSLog(@"%@", [g greetingForHour:9]);
}
return 0;
}
The @ keywords mark the Objective-C additions. Everything else, from int main to the ternary operator, is ordinary C. Messaging nil returns zero instead of crashing.
Memory management: from retain/release to ARC
For most of its life Objective-C used manual reference counting with retain, release and autorelease. Apple added optional garbage collection on the Mac in 2007, then deprecated it in favour of Automatic Reference Counting, introduced in 2011, where the Clang compiler inserts the retain and release calls itself. ARC carried directly over into Swift.
Influence and legacy
Java's interfaces are widely traced to Objective-C protocols, and its designers knew NeXTSTEP well. Swift, introduced by Apple in 2014, was designed to interoperate with Objective-C and uses the same runtime on Apple platforms, the same frameworks and many of the same naming conventions. Outside Apple, GNUstep keeps an open source implementation of the OpenStep APIs alive.
Is Objective-C still used today?
Yes, though new Apple projects mostly start in Swift. Large parts of Apple's own frameworks and many long-running apps still contain Objective-C, and Clang continues to support it. Knowing how Brad Cox built Objective-C on Smalltalk ideas, by bolting dynamic messaging onto unchanged C, explains both its flexibility and its quirks, and why it held up the Apple ecosystem for roughly three decades.
Frequently asked questions
Who invented Objective-C and when?
Brad Cox and Tom Love created Objective-C in the early 1980s at Productivity Products International, with 1984 the year most often cited. Cox was the main language designer, and the company was later renamed Stepstone.
Why did Apple use Objective-C for macOS and iOS?
Apple inherited it from NeXT, which it acquired in 1997. NeXTSTEP and its frameworks were written in Objective-C, and they became Mac OS X and Cocoa. iOS was built on the same foundations, so Objective-C became the language for iPhone apps in 2008.
Can Objective-C and Swift be used in the same project?
Yes. Xcode supports mixed projects, using a bridging header to expose Objective-C code to Swift and a generated header to expose Swift code to Objective-C. This is how many large apps migrated gradually instead of rewriting everything at once.







