為何要學習Objective-C?從環境搭建開始

目錄

前言

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86551.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu18.04安裝 gcc 9以及2019版本tbb

一、安裝gcc 9 ubuntu18.04默認是用的gcc7.5 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt-get install gcc-9 g-9 下面是配置優先用哪個版本的gcc和g &#xff0c;后面帶的值越大越優先用誰&#xff0c;并且配置完全局生效不僅僅是在當…

JdbcUtils的三個版本以及sql注入問題

JDBC的工具類 1.0版本 JDBC的工具類 2.0版本&#xff08;智能一些&#xff09;&#xff0c;編寫properties屬性文件&#xff0c;程序就可以讀取屬性文件 JDBC的工具類 3.0版本&#xff0c;加入連接池對象 我們封裝jdbc工具類是為了減少代碼重復&#xff0c;方便開發&#xff0…

AS32系列MCU芯片I2C模塊性能解析與調試

國科安芯推出的AS32X601內置的I2C模塊提供了符合工業標準的兩線串行制接口&#xff0c;可用于MCU和外部IIC設備的通訊。IIC總線使用兩條串行線&#xff1a;串行數據線SDA和串行時鐘線SCL。 IIC接口模塊實現了IIC協議的標準模式和快速模式&#xff0c;支持多主機IIC總線架構。其…

釘釘小程序開發實戰:打造一個簡約風格的登錄頁面

在上一篇文章中&#xff0c;我們已經介紹了如何搭建釘釘小程序的基礎環境&#xff0c;并完成了項目的初始化配置。本文將繼續深入&#xff0c;手把手帶你實現一個簡約風格的登錄頁面&#xff0c;這是大多數企業級應用不可或缺的一部分。 釘釘小程序基于前端 Web 技術棧&#x…

論文研讀2-1:多GNSS雙歷元純相位定位-模型建立與誤差分析

后續文章: 論文研讀2-2&#xff1a;多GNSS雙歷元純相位定位-固定模糊度精度增益 論文研讀2-3&#xff1a;多GNSS雙歷元純相位定位-定位精度分析 僅相位定位中的模糊度解算問題 在衛星導航定位中&#xff0c;載波相位測量是實現高精度定位的基礎&#xff0c;但如果僅使用相位測…

Python----OpenCV(圖像増強——圖像平滑、均值濾波、高斯濾波、中值濾波、雙邊濾波)

Python----計算機視覺處理&#xff08;Opencv&#xff1a;圖像噪點消除&#xff1a;濾波算法&#xff0c;噪點消除&#xff09; 一、圖像平滑 圖像平滑處理&#xff08;Smoothing Images&#xff09;&#xff0c;也稱為圖像模糊處理、圖像濾波&#xff08;Images Filtering&am…

筆記:使用EasyExcel導入csv文件出現編碼問題,導致導入數據全為null的解決方法

筆記&#xff1a;使用EasyExcel導入csv文件出現編碼問題&#xff0c;導致導入數據全為null的解決方法 通常情況下&#xff0c;我們使用excel導入&#xff0c;但是部分情況下或者領導要求&#xff0c;我們需要使用csv導入文件&#xff0c;但是csv文件模板下載之后會變成系統當前…

NL2SQL(Natural Language to SQL)優化之道:提升準確率與復雜查詢能力

自然語言 → SQL 的轉譯&#xff08;NL2SQL&#xff09;技術&#xff0c;是讓非技術用戶與數據庫“對話”的橋梁。而在實際應用中&#xff0c;我們不僅需要“能轉”&#xff0c;更要“轉得準、轉得全、轉得快”。 一、什么是 NL2SQL&#xff1f; NL2SQL&#xff08;Natural La…

java中map的循環方式

什么是Map集合&#xff1f; Map是Java中的一個接口&#xff0c;它用于存儲鍵-值對&#xff0c;并且鍵和值都可以是任意對象。它是Java集合框架中的一部分&#xff0c;并提供了一些方法來操作和訪問Map中的元素。 Map中的每個鍵都是唯一的&#xff0c;這意味著不能使用相同的鍵…

python學習筆記(深度學習)

文章目錄 1、概述2、學習內容2.1、pytorch 常見語法2.1.1、sum2.1.2、廣播機制2.1.3、張量2.1.4、DataLoader 2.2、普通語法2.2.1、迭代器 1、概述 本篇博客用來記錄&#xff0c;在深度學習過程中&#xff0c;常用的 python 語法內容 2、學習內容 2.1、pytorch 常見語法 2.…

力扣網C語言編程題:搜索二維矩陣(右上角->左下角解法)

一. 簡介 上一篇文章關于"在二維數組中查找某個元素"的問題&#xff0c;提供了兩種解題思路&#xff0c;文章如下&#xff1a; 力扣網C語言編程題&#xff1a;搜索二維矩陣的普通解法與二分查找法-CSDN博客 本文提供第三種解題思路&#xff1a;從左下角->右上角…

AI大模型流式輸出,OkHttp Log攔截打印方案

背景&#xff1a; 使用okhttp框架進行網絡訪問時&#xff0c;一般會使用 HttpLoggingInterceptor 打印請求和響應的log。在使用okhttp訪問AI大模型時&#xff0c;如果選擇流式輸出&#xff0c;那么響應的body數據使用的SSE技術&#xff0c;服務異步發送大模型生成的增量token&…

看數據世界的歷史:全面梳理從關系庫、大數據到AI時代的數據發展及展望

序章 在數據庫不斷發展的時代里&#xff0c;我們看到了關系型數據庫&#xff08;RDB&#xff09;在一次次的數據演變過程中的占據王位&#xff0c;捍衛了勝利&#xff0c;像一個王朝更替下的“王權”的故事&#xff0c;精彩有趣。 本篇就來探討下數據庫的發展興衰史&#xff0…

元宇宙與人工智能的融合:從虛擬世界到智能生態的IT新革命

文章目錄 引言&#xff1a;前沿技術重塑數字交互體驗一、元宇宙與AI融合的本質&#xff1a;虛擬空間與智能交互的交匯元宇宙賦能AI&#xff1a;AI賦能元宇宙&#xff1a; 二、元宇宙與AI融合的演進&#xff1a;從概念到產業熱潮三、核心技術&#xff1a;元宇宙與AI融合的基石與…

問卷調查[mqtt dht]

任務 this code uses esp32-wroom-32 and dht11 to read the humidty and temperature, besieds, it will send the meassage to the cloud platform. All communication is conducted through MQTT. 打分標準 您應該對以下代碼進行評級&#xff0c;并且必須遵守如…

swift 對象轉Json

在 Swift 中將對象轉換為 JSON 可以通過以下方法實現&#xff1a; 使用 Codable 協議 Swift 的 Codable 協議&#xff08;Encodable 和 Decodable 的組合&#xff09;是處理 JSON 編碼和解碼的推薦方式。 struct Person: Codable {var name: Stringvar age: Int }let person…

Python學習Day43

學習來源&#xff1a;浙大疏錦行 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transforms import numpy as np import matplotlib.pyplot as plt from PIL import Image import os # 設置隨機…

了解一下Unity AssetBundle 的幾種加載方式

Unity 的 AssetBundle 系統提供了多種加載方式&#xff0c;以滿足不同場景下的資源管理和性能需求。 同步加載&#xff08;LoadFromFile&#xff09; 同步加載使用 AssetBundle.LoadFromFile 方法從文件系統中直接加載 AssetBundle。這種方式會阻塞主線程&#xff0c;直到加載…

鴻蒙邊緣智能計算架構實戰:多線程圖像采集與高可靠緩沖設計

目錄 一、技術背景與挑戰二、鴻蒙邊緣計算架構的核心特性1. 分布式軟總線&#xff1a;打破設備孤島2. 輕量化多線程模型 三、多線程圖像采集的穩定性設計1. 分層緩沖隊列架構2. 線程優先級策略 四、邊緣側高可靠緩沖機制1. 基于分布式數據管理的容錯設計2. 動態帶寬調節 五、實…

excel中vba開發工具

1、支持單元格點擊出現彈框進行選擇 支持模多次模糊查詢 Private Sub CommandButton1_Click() Call vehicle_查詢 End SubPrivate Sub Worksheet_Activate()Call vehicle_取出車架號和公司名稱 取出不重復的車架號Sheet13.ComboBox1.Visible False 車架號顯示Sheet13.ComboB…