TOC

Objective-C 语言

  • 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 框架)
    • 安全、音视频、图形等框架
    • 应用生态
  • 语言: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 的话可能会有一些问题。

  1. GNUstep Base -> Foundation
  2. GNUstep GUI -> AppKit
  3. 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 偏动态类型
如果你有魔法,你可以看到一个评论框~