Objective-C方法參數標簽怎么設置

在Objective-C中,方法名稱可以通過幾個標簽名稱組成,這是跟C/C++中完全不一樣的地方。每個標簽都是字段+冒號的寫法,冒號后面是方法的參數,參數包括參數類型和參數變量,其中參數類型要用括號括起。

方法參數的標簽是通過在方法聲明和實現中使用冒號(:)來設置的。簡單理解,標簽是Objective-C語法的一部分,通過冒號來區分方法名稱和參數,冒號前的都算是方法名字,冒號后的是函數的幾個參數。這些標簽不僅提高了代碼的可讀性,還使得方法調用更加明確和直觀。

下面是一個詳細的示例,展示了如何在Objective-C中設置和使用方法參數標簽。

示例:創建一個帶有多個參數標簽的方法

假設我們有一個類?Book,其中包含一個方法?initWithTitle:author:yearPublished:,該方法接收三個參數:書名、作者和出版年份,并初始化一個新的?Book?對象。

定義和實現?Book?類
#import <Foundation/Foundation.h>@interface Book : NSObject@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *author;
@property (nonatomic, assign) int yearPublished;- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author yearPublished:(int)yearPublished;@end@implementation Book- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author yearPublished:(int)yearPublished {self = [super init];if (self) {_title = title;_author = author;_yearPublished = yearPublished;}return self;
}@endint main(int argc, const char * argv[]) {@autoreleasepool {Book *book = [[Book alloc] initWithTitle:@"1984" author:@"George Orwell" yearPublished:1949];NSLog(@"Title: %@", book.title);NSLog(@"Author: %@", book.author);NSLog(@"Year Published: %d", book.yearPublished);}return 0;
}

解釋

方法聲明

- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author yearPublished:(int)yearPublished;
  • initWithTitle:?是第一個參數的標簽。
  • author:?是第二個參數的標簽。
  • yearPublished:?是第三個參數的標簽。

方法實現

- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author yearPublished:(int)yearPublished {self = [super init];if (self) {_title = title;_author = author;_yearPublished = yearPublished;}return self;
}
  • 在方法實現中,參數的順序和標簽與聲明保持一致。
  • 使用?_title_author?和?_yearPublished?來存儲傳入的參數值。

在Objective-C中,當你在類的實現中設置屬性的值時,通常可以直接使用屬性名(例如 self.title = title;)。然而,在初始化方法中直接使用屬性名可能會導致一些問題,特別是在屬性被重寫或有自定義的getter/setter方法的情況下。為了避免這些問題,通常會直接使用實例變量(即屬性的內部存儲變量)來設置屬性的初始值。

這里使用了 _title、_author 和 _yearPublished 來直接設置屬性的值。這些是屬性的內部存儲變量,用于存儲屬性的實際數據。使用這些內部存儲變量可以確保在初始化過程中直接設置值,而不會觸發任何額外的邏輯(如自定義的setter方法),從而避免潛在的問題。

詳細說明
直接使用屬性名:

self.title = title;
這種方式會調用屬性的setter方法。如果setter方法中有自定義的邏輯,這些邏輯會在初始化過程中被執行。在某些情況下,這種行為可能是不期望的。

使用內部存儲變量:

_title = title;
這種方式直接將值賦給實例變量,不會調用任何setter方法。這在初始化方法中是更為安全和推薦的做法,因為它確保了屬性的值被直接設置,不會觸發任何額外的邏輯。

因此,在初始化方法中使用實例變量而不是屬性名是一種更安全的做法,可以避免在對象初始化過程中不必要的副作用。

方法調用:

Book *book = [[Book alloc] initWithTitle:@"1984" author:@"George Orwell" yearPublished:1949];
  • 調用?initWithTitle:author:yearPublished:?方法時,每個參數前面都有相應的標簽。
  • 這種方式使得代碼非常清晰和易于理解。

總結

  • 每個參數前面都有一個標簽,標簽后面跟一個冒號(:)。
  • 標簽有助于提高代碼的可讀性和可維護性。
  • 方法調用時,每個參數都需要帶上對應的標簽,這使得調用意圖非常明確。

通過這種方式,你可以輕松地定義和使用帶有多個參數標簽的方法。

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

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

相關文章

20250910_《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》以10.1.1.31服務器的gtp-default數據庫為例

《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》 一、前提條件 數據庫 gtp-default 已設置為完整恢復模式 (FULL)。 每天凌晨02:00執行完整備份,保證日志備份可用。 SQL Server Agent 已啟用。 作業所有者為 sa,具有 sysadmin 權限。 Agent 服務賬號 NT Service\S…

實習項目包裝--HTTP 協議和 Web API

好的&#xff0c;完全沒問題&#xff01;你問到了一個非常核心且基礎的知識領域&#xff0c;這是現代Web開發和幾乎所有網絡應用的基石。我們暫別嵌入式系統&#xff0c;專門來上一堂關于 HTTP 協議和 Web API 的詳細課程。 我會從最根本的概念講起&#xff0c;逐步深入到你所…

ICCV-2025 | 中科院自動化所世界模型助力具身導航!NavMorph:連續環境中的視覺語言導航自演化世界模型

作者&#xff1a;Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3單位&#xff1a;1^{1}1中科院自動化所多模態人工智能系統國家重點實驗室&#xff0c;2^{2}2中國科學院大學人工智能學院&#xff0c;3^{3}3鵬城實驗室論文標題&#xff1a;NavM…

【ARDUINO】ESP8266的AT指令返回內容集合

一、基礎測試指令(確認模塊通信) 1. AT(測試模塊是否響應) 功能:檢測ESP8266與控制器(如Arduino)的串口通信是否正常。 返回內容: 成功:OK(無額外數據,僅確認通信正常) 失敗:無返回(可能是波特率不匹配、接線錯誤) 示例:發送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:開源免費的本地Mock服務工具,提升前后端聯調效率

你有沒有過這種經歷&#xff1f;做前端開發時&#xff0c;后端同事的接口還沒寫完&#xff0c;你這邊要調頁面數據&#xff0c;只能對著空控制臺發呆&#xff1f;要么手動寫個 JSON 文件當假數據&#xff0c;改一次數據就得重新保存文件、刷新頁面&#xff1b;要么用在線 Mock …

【Mysql|第一篇】Mysql的安裝與卸載、Navicat工具的使用

一、Mysql的安裝與卸載&#xff1a; 1、查看是否安裝過mysql&#xff1a; &#xff08;1&#xff09;cmd中輸入mysql看是否有顯式提醒 &#xff08;2&#xff09;右擊此電腦&#xff0c;選擇管理&#xff0c;在左側欄中找到服務&#xff0c;查看是否有與mysql相關的 2、卸載的…

貪心算法應用:流行病干預策略問題詳解

Java中的貪心算法應用&#xff1a;流行病干預策略問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇&#xff0c;從而希望導致全局最優解的算法策略。在流行病干預策略問題中&#xff0c;貪心算法可以有效地幫助我們做出資源分配決策&#xff0c;以達到最優的防…

git刪除最近一次提交包括歷史記錄。

方法一&#xff1a;刪除最近的一次提交&#xff08;最常見&#xff09; 如果你只是想撤銷最后一次提交&#xff0c;這是最簡單的方法。在本地刪除提交 使用 git reset --hard 命令&#xff0c;將你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…

前端拖拽功能實現全攻略

前端拖拽功能實現指南 設計一個拖拽組件確實需要考慮不少細節。下面我為你梳理了從核心思路、關鍵實現到注意事項的完整方案&#xff0c;并用表格對比了 Vue 和 React 的實現差異&#xff0c;希望能幫你全面掌握。 &#x1f9e0; 一、核心設計思路 一個拖拽組件的核心在于感…

ASP.NET MVC 連接 MySQL 數據庫查詢示例

為您創建一個完整的 ASP.NET MVC 應用程序&#xff0c;演示如何通過點擊按鈕連接 MySQL 數據庫并查詢數據表。 完整實現步驟 1. 首先安裝必要的 NuGet 包 在項目中安裝以下 NuGet 包&#xff1a; MySql.Data Dapper&#xff08;可選&#xff0c;用于簡化數據訪問&#xff0…

合理安排時間節點,避免影響正常生產——制造企業軟件系統上線的關鍵考量

在制造企業的發展中&#xff0c;引入新的軟件系統是提升管理效率、優化業務流程的重要舉措。然而&#xff0c;軟件系統的上線過程如果安排不當&#xff0c;很可能會對企業的正常生產造成負面影響。作為一名制造企業的行政經理&#xff0c;在軟件選型和推進使用的過程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原機安卓4升級安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)&#xff0f;S905L2(B)&#xff0f;S905L3(B)-原機安卓4升級安卓7&#xff0f;安卓9-通刷固件包線刷方法&#xff1a;1、準備好一根雙公頭USB線刷刷機線&#xff0c;長度30-50CM長度最佳&#xff0c;同時準備一臺電腦&#xff1b;2、電腦上安裝好刷機工…

Vite開發:從入門到精通

序章&#xff1a;構建之道現代前端的破局者前端發展簡史&#xff1a;從 Grunt、Gulp、Webpack 到 Vite構建工具的本質與未來為什么是 Vite&#xff1f;——新時代的構建哲學本書閱讀導覽與學習路徑第一篇 入門啟蒙識得 Vite 真面目第1章 Vite 初識什么是 Vite&#xff1f;設計理…

Spring事件監聽機制(二)

接著之前的事件監聽機制實現&#xff0c;我們可以進一步優化。從以下兩個方面&#xff1a;1.使用EventListener注解Configuration public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApp…

STM32物聯網項目---ESP8266微信小程序結合OneNET平臺MQTT實現STM32單片機遠程智能控制---代碼篇(四)

一、簡介該篇代碼實現了ESP8266上傳數據到云平臺的功能&#xff08;可以更改命令和溫度的數據&#xff09;&#xff0c;我只測試了上傳數據&#xff0c;是沒有問題的&#xff0c;如果自己由別的需求可以自行在云平臺創建設備和更改代碼&#xff1a;二、工程源碼這個代碼是進行驗…

城際班車駕駛員安全學習課程

背景 正在做一個班車預約小程序&#xff0c;里面需要增加一個功能&#xff1a;駕駛員在線學習打卡功能&#xff1a; 圖文學習內容&#xff0c;學習完之后&#xff0c;一鍵打卡&#xff1a;學習完畢&#xff1b;視頻學習內容&#xff0c;看完后&#xff0c;一鍵打卡&#xff1…

Cy5-Tyramide, Cyanine 5 Tyramide;1431148-26-3

一、基本內容&#xff1a; Cyanine 5 Tyramide (Tyramide-Cy5) 是一種紅色熒光染料&#xff0c;被用作辣根過氧化物酶 HRP 催化沉積的報告熒光底物&#xff0c;是一種免疫測定和核酸原位雜交中的信號放大技術。 英文名稱&#xff1a;Cy5-Tyramide, Cyanine 5 Tyramide中文名稱…

5.1 機器學習 - 模型調參

模型調參是提升泛化能力的關鍵步驟&#xff0c;核心分為 “人工調參”&#xff08;依賴經驗與實驗管理&#xff09;和 “自動調參”&#xff08;依賴算法與算力&#xff09;&#xff0c;二者適用場景不同&#xff0c;需結合數據量、算力資源和項目周期選擇。 一、人工調整超參數…

音視頻技術全景:從采集到低延遲播放的完整鏈路解析

一、為什么需要音視頻知識普及 在當下的數字化時代&#xff0c;音視頻已經不再是單純的“附屬功能”&#xff0c;而是成為教育、醫療、安防、金融、低空經濟、工業互聯網等領域的核心生產要素。一條視頻鏈路的質量&#xff0c;直接決定了課堂能否互動順暢、手術能否遠程指導、…

Mybatis常見問題

Mybatis常見問題 什么是Mybatis&#xff1f; &#xff08;1&#xff09;Mybatis是一個半ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;它內部封裝了JDBC&#xff0c;加載驅動、創建連接、創建statement等繁雜的過程&#xff0c;開發者開發時只需要關注如何編寫SQL語…