目录
前言
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仍有其重要价值:
-
维护老项目需求:苹果生态中存在大量使用Objective-C编写的遗留代码,特别是企业级应用和大型项目
-
开源库兼容性:许多优秀的开源库仍然是用Objective-C编写的,理解OC能帮助你更好地使用和贡献这些项目
-
底层原理理解:Objective-C更接近底层,学习它可以帮助你深入理解iOS/macOS的运行时机制
-
面试加分项:许多技术面试仍会考察Objective-C相关知识,特别是对内存管理、runtime等底层原理的理解
开发环境搭建
我们将使用Xcode作为开发工具,它是苹果官方提供的集成开发环境(IDE)。
1. 安装Xcode
从Mac App Store搜索并安装Xcode,或者从苹果开发者网站下载。
安装完成后,打开Xcode,你可能还需要安装一些额外的命令行工具(Xcode会提示你)。
2. 创建第一个Command Line Tool项目
为了避免一开始就陷入复杂的UIKit框架,我们从简单的命令行工具开始:
-
打开Xcode,选择"Create a new Xcode project"
-
选择"macOS" → "Command Line Tool"
-
输入产品名称(如"HelloObjectiveC")
-
确保语言选择"Objective-C"
-
选择保存位置,点击"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"开头的类名和函数名,比如NSLog
、NSString
、NSArray
等。这个"NS"前缀其实有着重要的历史渊源和技术含义。
"NS"的起源:NeXTSTEP操作系统
"NS"是NeXTSTEP的缩写,这是由Steve Jobs在1985年离开苹果后创立的NeXT公司开发的操作系统环境:
-
历史背景:
-
1985年:Steve Jobs离开苹果,创立NeXT公司
-
1988年:NeXT推出NeXTSTEP操作系统
-
1996年:苹果收购NeXT,Steve Jobs回归
-
2001年:Mac OS X发布,基于NeXTSTEP技术
-
-
技术传承:
-
Objective-C语言在NeXTSTEP中被选为官方开发语言
-
许多基础框架(如Foundation、AppKit)最初是为NeXTSTEP设计的
-
这些框架中的类保留了"NS"前缀以示其来源
-
为什么保留"NS"前缀?
即使在苹果收购NeXT后,"NS"前缀仍然被保留下来,主要原因包括:
-
命名空间管理:
-
Objective-C没有真正的语言级命名空间
-
前缀可以避免类名冲突(如你的
String
类 vs 系统的NSString
)
-
-
历史兼容性:
-
保持与已有代码的兼容性
-
开发者已经熟悉这些命名约定
-
-
框架标识:
-
可以直观看出类属于哪个框架
-
"NS"表示来自Foundation框架(NS = NeXTSTEP)
-
"UI"表示来自UIKit框架(iOS)
-
"CA"表示来自Core Animation框架
-
现代Objective-C中的命名变化
虽然"NS"前缀仍然广泛使用,但苹果在现代也有了一些变化:
-
Swift中移除了大部分前缀(如String而不是NSString)
-
新框架使用新前缀(如
WKWebView
中的"WK"代表WebKit) -
跨平台框架倾向于使用更中性的前缀(如
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