为何要学习Objective-C?从环境搭建开始

发布于:2025-06-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

前言

Swift时代为何还要学Objective-C?

开发环境搭建

1. 安装Xcode

2. 创建第一个Command Line Tool项目

初识Objective-C代码

编写"Hello, Objective-C!"

编译运行程序

为什么Objective-C中的NSLog和NSString前面都有"NS"前缀?

"NS"的起源:NeXTSTEP操作系统

为什么保留"NS"前缀?

现代Objective-C中的命名变化

技术细节:NSLog vs printf

"NS"总结

相关推荐


前言

        在Swift已经成为苹果生态主流开发语言的今天,许多初学者可能会疑惑:为什么我们还需要学习"古老"的Objective-C?这篇博客将解答这个问题,并带你完成Objective-C开发环境的搭建,写出第一个"Hello, Objective-C!"程序。

Swift时代为何还要学Objective-C?

虽然Swift确实更现代、更安全,但学习Objective-C仍有其重要价值:

  1. 维护老项目需求:苹果生态中存在大量使用Objective-C编写的遗留代码,特别是企业级应用和大型项目

  2. 开源库兼容性:许多优秀的开源库仍然是用Objective-C编写的,理解OC能帮助你更好地使用和贡献这些项目

  3. 底层原理理解:Objective-C更接近底层,学习它可以帮助你深入理解iOS/macOS的运行时机制

  4. 面试加分项:许多技术面试仍会考察Objective-C相关知识,特别是对内存管理、runtime等底层原理的理解

开发环境搭建

我们将使用Xcode作为开发工具,它是苹果官方提供的集成开发环境(IDE)。

1. 安装Xcode

从Mac App Store搜索并安装Xcode,或者从苹果开发者网站下载。

安装完成后,打开Xcode,你可能还需要安装一些额外的命令行工具(Xcode会提示你)。

2. 创建第一个Command Line Tool项目

为了避免一开始就陷入复杂的UIKit框架,我们从简单的命令行工具开始:

  1. 打开Xcode,选择"Create a new Xcode project"

  2. 选择"macOS" → "Command Line Tool"

  3. 输入产品名称(如"HelloObjectiveC")

  4. 确保语言选择"Objective-C"

  5. 选择保存位置,点击"Create"

初识Objective-C代码

创建项目后,你会看到Xcode自动生成了一个main.m文件,这是程序的入口点。让我们解析一下其中的关键部分:

  • #import <Foundation/Foundation.h>:导入Foundation框架,它提供了OC的基础类和方法

  • @autoreleasepool:内存管理相关的自动释放池,我们后续会详细讲解

  • NSLog():相当于其他语言中的print/console.log,用于输出日志

  • @"字符串":Objective-C中的字符串字面量写法(注意@符号

编写"Hello, Objective-C!"

让我们修改自动生成的代码,输出我们自己的消息:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hello, Objective-C!");
        NSLog(@"这是我的第一个OC程序");
    }
    return 0;
}

编译运行程序

在Xcode中,点击左上角的"运行"按钮(或按⌘+R),你将在底部控制台看到输出:

恭喜!你已经成功完成了第一个Objective-C程序!

为什么Objective-C中的NSLog和NSString前面都有"NS"前缀?

在Objective-C开发中,你会频繁遇到以"NS"开头的类名和函数名,比如NSLogNSStringNSArray等。这个"NS"前缀其实有着重要的历史渊源和技术含义。

"NS"的起源:NeXTSTEP操作系统

"NS"是NeXTSTEP的缩写,这是由Steve Jobs在1985年离开苹果后创立的NeXT公司开发的操作系统环境:

  1. 历史背景

    • 1985年:Steve Jobs离开苹果,创立NeXT公司

    • 1988年:NeXT推出NeXTSTEP操作系统

    • 1996年:苹果收购NeXT,Steve Jobs回归

    • 2001年:Mac OS X发布,基于NeXTSTEP技术

  2. 技术传承

    • Objective-C语言在NeXTSTEP中被选为官方开发语言

    • 许多基础框架(如Foundation、AppKit)最初是为NeXTSTEP设计的

    • 这些框架中的类保留了"NS"前缀以示其来源

为什么保留"NS"前缀?

即使在苹果收购NeXT后,"NS"前缀仍然被保留下来,主要原因包括:

  1. 命名空间管理

    • Objective-C没有真正的语言级命名空间

    • 前缀可以避免类名冲突(如你的String类 vs 系统的NSString

  2. 历史兼容性

    • 保持与已有代码的兼容性

    • 开发者已经熟悉这些命名约定

  3. 框架标识

    • 可以直观看出类属于哪个框架

    • "NS"表示来自Foundation框架(NS = NeXTSTEP)

    • "UI"表示来自UIKit框架(iOS)

    • "CA"表示来自Core Animation框架

现代Objective-C中的命名变化

虽然"NS"前缀仍然广泛使用,但苹果在现代也有了一些变化:

  1. Swift中移除了大部分前缀(如String而不是NSString)

  2. 新框架使用新前缀(如WKWebView中的"WK"代表WebKit)

  3. 跨平台框架倾向于使用更中性的前缀(如MTKView中的"MTK"代表MetalKit)

技术细节:NSLog vs printf

NSLog为例,它比C语言的printf更强大:

// C语言风格
printf("Hello,World"); //不支持自动换行,需要自己手动\n

// Objective-C风格
NSLog(@"Hello, World");  // 自动换行,带时间戳,进程号/线程号等

关键区别:

  • NSLog自动添加换行和时间戳

  • 使用%@格式化符来输出Objective-C对象

  • 字符串前需要加@符号(@"字符串"

"NS"总结

"NS"前缀是Objective-C和苹果开发历史的重要组成部分,它:

  • 源自NeXTSTEP操作系统

  • 在缺乏命名空间的Objective-C中解决命名冲突

  • 已经成为Cocoa/Cocoa Touch框架的标识特征

  • 即使在新语言Swift中,与Objective-C交互时仍能看到这些前缀

相关推荐

Flutter 路由与导航的详细使用-CSDN博客文章浏览阅读614次,点赞14次,收藏15次。本文详细介绍了Flutter路由与导航的使用,包括基本路由和命名路由的定义与使用、路由传参的多种方式、路由拦截与守卫的实现以及第三方路由库的应用。通过实例演示和代码解析,帮助开发者全面理解Flutter路由与导航的机制,掌握高效管理页面跳转和数据传递的技巧。 https://shuaici.blog.csdn.net/article/details/146084028Flutter Hero 组件详解及应用-CSDN博客文章浏览阅读1k次,点赞39次,收藏28次。Hero组件的核心功能是实现页面跳转时的共享元素动画(Shared Element Transition)。它通过在两个页面中定义相同的tag值,自动检测并创建平滑的过渡动画。 https://shuaici.blog.csdn.net/article/details/146083772


网站公告

今日签到

点亮在社区的每一天
去签到