在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语…