- 1967 年:Simula 67 诞生,首次引入面向对象编程(OOP)概念。
- 1970s:Xerox PARC 开发 Smalltalk,确立基于“消息传递”的 OOP 范式。
- 1983 年:Brad Cox 和 Tom Love 开发 Objective-C(基于 C,加入 Smalltalk 风格消息传递)。
- 1986 年:Stepstone 公司发布 Objective-C 编译器。
- 1988 年:NeXT 购买 Objective-C 许可证,基于此开发 NeXTSTEP 操作系统。
- 1993 年:NeXT 关闭硬件业务,专注于 NeXTSTEP 软件。
- 1994 年:NeXT 与 Sun Microsystems 发布 OpenStep API 标准。
- 1996 年:Apple 收购 NeXT,乔布斯回归 Objective-C 成为 Apple 官方语言。
- 2001 年:Mac OS X 10.0 发布,Cocoa(Foundation + AppKit)成为核心框架。
- 2007 年:iPhone 发布,iOS 推出 UIKit 作为 UI 框架。
- 2008 年:Objective-C 2.0 发布,引入垃圾回收、属性语法等改进。
- 2011 年:Apple 推出 ARC(自动引用计数),取代垃圾回收。
- 2012 年:Apple 迁移到 Clang(LLVM),引入 Objective-C Literals。
- 2014 年:Apple 发布 Swift,作为 Objective-C 现代化替代方案。
- 2015 年:Swift 开源,支持 Linux。
- 2019 年:Swift 5.0 使 ABI 稳定,优化 iOS/macOS 生态。
- 2020s:Swift 逐渐取代 Objective-C,但后者仍用于旧代码维护。
技术框架
- 系统:NeXTSTEP -> macOS/iOS
- Darwin 底层系统
- Mach 微内核 + FreeBSD 组件 = XNU 混合内核
- FreeBSD 用户空间
- I/O Kit 驱动框架
- CoreFoundation(C 语言库,是 Foundation 的基础)
- Cocoa 开发框架
- Foundation(Objective-C 语言库)
- AppKit(macOS UI 框架)/UIKit(iOS UI 框架)
- 安全、音视频、图形等框架
- 应用生态
- Darwin 底层系统
- 语言:Objective-C (libobjc) -> Swift
- 运行时:libobjc (Apple 私有,GNU libobjc 开源)
- 编译器:Clang/LLVM (Apple 在 2012 年放弃 GCC,全面迁移到 Clang)
- API 框架:OpenStep -> Cocoa(Foundation + AppKit(macOS) / UIKit(iOS))
- GUI 开发:Interface Builder
- IDE:Project Builder -> Xcode
GNUstep
开发服务端或者命令行程序比较合适,GUI 的话可能会有一些问题。
- GNUstep Base -> Foundation
- GNUstep GUI -> AppKit
- GNUstep libobjc (GCC) -> Objective-C 运行时
sudo apt install gnustep gnustep-devel
#import <Foundation/Foundation.h>
int main() {
@autoreleasepool {
NSLog(@"Hello from GNUstep!");
}
return 0;
}
gcc -o test test.m -I/usr/include/GNUstep -lgnustep-base -lobjc
./test
#import <AppKit/AppKit.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSApplication *app = [NSApplication sharedApplication];
NSWindow *win = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 400, 300)
styleMask:(NSTitledWindowMask | NSClosableWindowMask)
backing:NSBackingStoreBuffered
defer:NO];
[win setTitle:@"GNUstep App"];
[win makeKeyAndOrderFront:nil];
[app run];
}
return 0;
}
gcc -o gui_app gui_app.m -I/usr/include/GNUstep -lgnustep-gui -lgnustep-base -lobjc
Objective-C vs C++
- C++ 偏静态类型
- Objective-C 偏动态类型