目錄
前言
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