当前位置: 首页 > news >正文

Objective-C 构造方法的定义和声明规范

总目录 iOS开发笔记目录 从一无所知到入门

文章目录

    • 源码中 NSArray 的构造方法与命名规律
    • 自定义类的构造方法命名
      • 截图
      • 代码
      • 输出

源码中 NSArray 的构造方法与命名规律

在这里插入图片描述

@interface NSArray<ObjectType> (NSArrayCreation)+ (instancetype)array;
+ (instancetype)arrayWithObject:(ObjectType)anObject;
+ (instancetype)arrayWithObjects:(const ObjectType _Nonnull [_Nonnull])objects count:(NSUInteger)cnt;
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;- (instancetype)initWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array;
- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;/* Reads array stored in NSPropertyList format from the specified url. */
- (nullable NSArray<ObjectType> *)initWithContentsOfURL:(NSURL *)url error:(NSError **)error  API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
/* Reads array stored in NSPropertyList format from the specified url. */
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfURL:(NSURL *)url error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) NS_SWIFT_UNAVAILABLE("Use initializer instead");@end

可以看出,一个类型中,用于返回一个该类型对象的方法(不止是构造方法)的命名规律为以下(其中Xxx表示具体的类名):

  • 方法的返回值可以从 (Xxx *) 变成 (instancetype) ,其中instancetype在该类中表示该类的实例类型。加nullable表示方法的返回值可为空。
  • +开头的类方法的命名:xxx xxxWithArg1: arg2: arg3...
  • -开头的对象方法的命名:initWithArg1: arg2: arg3...

自定义类的构造方法命名

按照上述规律,自定义类,代码如下:

截图

Person类定义:
在这里插入图片描述
main方法调用部分:
在这里插入图片描述

代码

//
//  main.m
//  构造方法
//
//  Created by wuyujin1997 on 2023/2/23.
//#import <Foundation/Foundation.h>@interface Person : NSObject {@publicNSString* name;int age;
}
+ (instancetype) person;
+ (instancetype) personWithName:(NSString*)name age:(int)age;
- (instancetype) initWithName:(NSString*)name age:(int)age;
@end@implementation Person
+ (instancetype) person {return [Person new];
}
+ (instancetype) personWithName:(NSString*)name age:(int)age {Person* person = [Person new];person->name = name;person->age = age;return person;
}
- (instancetype) initWithName:(NSString*)name age:(int)age {self->name = name;self->age = age;return self;
}
// description方法用于改写打印本类对象时的输出内容格式,类似于 Java 中的 toString() 。
- (NSString *)description {return [NSString stringWithFormat:@"<%@:%p> name:%@ age:%d", [self class], self, self->name, self->age];
}
@endint main(int argc, const char * argv[]) {NSArray* arr1 = [NSArray new];NSArray* arr2 = [NSArray array];NSArray* arr3 = [NSArray arrayWithArray:arr1];Person* p1 = [Person new];Person* p2 = [Person person];Person* p3 = [Person personWithName:@"wuyujin1997" age:26];NSLog(@"%@", p1);NSLog(@"%@", p2);NSLog(@"%@", p3);[p1 initWithName:@"测试赋值" age:22];   // 已有对象,只是调用 initXxx 方法去做属性值的赋值/初始化而已。NSLog(@"%@", p1);return 0;
}

输出

2023-02-26 20:02:19.759434+0800 构造方法[29043:905161] <Person:0x6000002033a0> name:(null) age:0
2023-02-26 20:02:19.759661+0800 构造方法[29043:905161] <Person:0x600000203400> name:(null) age:0
2023-02-26 20:02:19.759684+0800 构造方法[29043:905161] <Person:0x600000203460> name:wuyujin1997 age:26
2023-02-26 20:02:19.759704+0800 构造方法[29043:905161] <Person:0x6000002033a0> name:测试赋值 age:22
Program ended with exit code: 0

相关文章:

Objective-C 构造方法的定义和声明规范

总目录 iOS开发笔记目录 从一无所知到入门 文章目录源码中 NSArray 的构造方法与命名规律自定义类的构造方法命名截图代码输出源码中 NSArray 的构造方法与命名规律 interface NSArray<ObjectType> (NSArrayCreation) (instancetype)array;(instancetype)arrayWithObject…...

Matlab图像处理学习笔记

Matlab图像处理 Matlab基础 数组 1、向量 生成方式1: x = [值] x = [1 2 3] % 行向量 y = [4; 5; 6] % 列向量 z = x % 行向量转列向量...

笔记(三)——迭代器的基础理论知识

迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法&#xff0c;并且定义了容器中对象的范围。一、vector容器的iterator类型vector容器的迭代器属于随机访问迭代器&#xff0c;一次可以移动多个位置。vector<int>::iterator …...

没有公网ip怎么外网访问nas?快解析内网端口映射到公网

对于NAS用户而言&#xff0c;外网访问是永远绕不开的话题。拥有NAS后的第一个问题&#xff0c;就是搞定NAS的外网访问。不过众所周知&#xff0c;并不是所有的小伙伴都能得到公网IP&#xff0c;由于IPV4资源的枯竭&#xff0c;一般不会被分配到公网IP。公网IP在很大程度上除了让…...

spring integration使用:消息转换器

系列文章目录 …TODO spring integration开篇&#xff1a;说明 …TODO spring integration使用&#xff1a;消息路由 spring integration使用&#xff1a;消息转换器 spring integration使用&#xff1a;消息转换器系列文章目录前言消息转换器&#xff08;或者叫翻译器&#x…...

Vue3电商项目实战-商品详情模块7【21-商品详情-评价组件-头部渲染、22-商品详情-评价组件-实现列表】

文章目录21-商品详情-评价组件-头部渲染22-商品详情-评价组件-实现列表21-商品详情-评价组件-头部渲染 目的&#xff1a;根据后台返回的评价信息渲染评价头部内容。 yapi 平台可提供模拟接口&#xff0c;当后台接口未开发完毕或者没有数据的情况下&#xff0c;可以支持前端的开…...

地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?

指针是C语言中的一个重要概念&#xff0c;也是C语言的一个重要特色&#xff1b;使用指针&#xff0c;可以使程序简洁、紧凑、高效。不掌握指针&#xff0c;就没有掌握C语言的精华。 目录 一、定义 1.1地址 1.2指针 1.3指针变量 1.4指针和指针变量的区别 二、使用指针变量…...

【MongoDB】一、MongoDB的安装与部署

【MongoDB】一、MongoDB的安装与部署实验目的实验内容实验步骤一、下载MongoDB安装包二、创建文件夹data及子文件夹db和log三、启动MongDB服务1. 在命令行窗口执行启动MongoDB服务命令2. 打开mongodb.log3. 打开浏览器进行启动验证四、登录MongoDB五、配置环境变量六、将MongDB…...

《爆肝整理》保姆级系列教程python接口自动化(二十三)--unittest断言——上(详解)

简介 在测试用例中&#xff0c;执行完测试用例后&#xff0c;最后一步是判断测试结果是 pass 还是 fail&#xff0c;自动化测试脚本里面一般把这种生成测试结果的方法称为断言&#xff08;assert&#xff09;。用 unittest 组件测试用例的时候&#xff0c;断言的方法还是很多的…...

MySQL的mvcc

mvcc&#xff08;多版本并发控制&#xff09; MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。使得在InnoDB的事务隔离级别下执行 一致性读操作有了保证。可以认为是行级锁的变种&#xff0c;在很多情况下可以避免加锁&#xff0c;开销更低 mvcc没有正式的标准&…...

vite:常见的配置

最近在捣鼓一下vite&#xff0c;因为自己一直在使用react&#xff0c;就选择vite、react来体验一下vite。 使用最简单的方法创建一个应用&#xff1a;yarn create vite&#xff0c;然后选择react框架。 vite默认配置是使用了defineConfig工具函数&#xff1a; import { defi…...

计算机图形学:liang算法和Cyrus-Beck算法

其中Cyrus-Beck算法呢&#xff0c;是计算一根直线一个多边形的交线段&#xff1b;liang算法是Cyrus的一个特例&#xff0c;即多边形刚好是矩形&#xff1b;先看看Cyrus算法的思路【从别的博客找的图片】&#xff1a;这很容易理解&#xff0c;点积>0时就可能中内部嘛&#xf…...

React组件之间的通信方式总结(上)

先来几个术语&#xff1a; 官方我的说法对应代码React elementReact元素let element<span>A爆了</span>Component组件class App extends React.Component {}无App为父元素&#xff0c;App1为子元素<App><App1></App1></App> 本文重点&…...

C++17 nodiscard标记符

文章目录前言弃值表达式nodiscard标记符函数非弃值声明类/枚举类/结构 非弃值声明返回类引用与类指针前言 在C 17中引入了一个标记符nodiscard&#xff0c;用于声明一个 “非弃值(no-discard)表达式”。那么在开始之前&#xff0c;我们需要了解一下什么是弃值表达式。 弃值表…...

SAP 寄售业务的标准流程

SAP的标准寄售业务&#xff0c;供应商提供的物料只有在公司使用之后才需支付应付账款&#xff0c;类似是一种先吃后付钱的餐饮流程。 SAP的寄售流程把实际业务中的供应商&#xff0c;采购方收货&#xff0c;采购方消耗物料&#xff0c;采购方依据消耗物料数量进行付款&#xff…...

操作系统高频知识

目录 一、线程与进程的区别 区别&#xff1a; 二、多进程和多线程区别 三、进程与程序的区别 三、死锁 1、是什么 2、产生的原因 3、产生的必要条件&#xff08;4个&#xff09; 4、如何预防 5、如何避免 6、如何检测 7、如何解除 一、线程与进程的区别 1、线程&a…...

加载预训练模型,模型微调,在自己的数据集上快速出效果

针对于某个任务&#xff0c;自己的训练数据不多&#xff0c;先找到一个同类的别人训练好的模型&#xff0c;把别人现成的训练好了的模型拿过来&#xff0c;换成自己的数据&#xff0c;调整一下参数&#xff0c;再训练一遍&#xff0c;这就是微调&#xff08;fine-tune&#xff…...

VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】

问题描述 使用服务器的过程中突然与服务器断连&#xff0c;报错如下&#xff1a;could not establist connection to [20:23:39.487] > ssh: connect to host 10.201.0.131 port 22: Connection timed out > [20:23:39.495] > 过程试图写入的管道不存在。 > [20…...

电子技术——B类输出阶

电子技术——B类输出阶 下图展示了一个B类输出阶的原理图&#xff0c;B类输出阶由两个互补的BJT组成&#xff0c;不同时导通。 原理 当输入电压 vI0v_I 0vI​0 的时候&#xff0c;两个晶体管都截止输出电压为零。当 vIv_IvI​ 上升至超过0.5V的时候&#xff0c;此时 QNQ_NQN…...

【老卫搬砖】034期:HarmonyOS 3.1 Beta 1初体验,我在本地模拟器里面刷短视频

今天啊打开这个DevEco Studio的话&#xff0c;已经提示有3.1Beta1版本的一个更新啊。然后看一下它的一些特性。本文也演示了如何在本地模拟器里面运行HarmonyOS版短视频。 主要特性 新特性包括&#xff1a; Added support for Windows 11 64-bit and macOS 13.x OSs, as well…...

Ansible file模块实战:从创建目录到管理软硬链接,一篇搞定Linux文件系统日常运维

Ansible file模块实战&#xff1a;从创建目录到管理软硬链接&#xff0c;一篇搞定Linux文件系统日常运维 在当今云计算和自动化运维的时代&#xff0c;手动登录服务器执行文件操作已经成为效率的瓶颈。想象一下&#xff0c;当你需要在数百台服务器上统一创建应用目录结构、批量…...

5分钟掌握Windows安装Android应用的终极方案

5分钟掌握Windows安装Android应用的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行Android应用&#xff0c;却苦于复杂的…...

GPU内存优化:深度学习检查点技术原理与实践

1. GPU内存优化&#xff1a;深度学习训练中的检查点技术解析在训练现代深度神经网络时&#xff0c;GPU内存限制往往成为制约模型规模扩展的关键瓶颈。以典型的VGG-19模型为例&#xff0c;当批量大小设置为256时&#xff0c;仅正向传播阶段就需要消耗超过20GB的显存&#xff0c;…...

蓝桥杯嵌入式备赛:手把手教你用STM32G4的ADC读取光敏电阻(国信长天扩展板)

蓝桥杯嵌入式竞赛实战&#xff1a;STM32G4光敏电阻精准采集与优化策略 在蓝桥杯嵌入式竞赛中&#xff0c;环境光检测是高频考点之一。国信长天扩展板上的光敏电阻模块看似简单&#xff0c;但要在竞赛中稳定发挥&#xff0c;需要深入理解硬件电路设计原理、掌握ADC采集的优化技巧…...

时序电路的心脏:钟控触发器(RS/D/JK/T)原理与应用全解析

1. 时序电路的心脏&#xff1a;为什么需要钟控触发器&#xff1f; 第一次接触数字电路时&#xff0c;我被各种触发器绕得头晕。直到老师用"心脏"来比喻钟控触发器&#xff0c;才恍然大悟——就像心脏通过规律跳动为全身供血一样&#xff0c;钟控触发器通过时钟脉冲协…...

仅限内部测试者知晓:Midjourney未公开的--detail boost隐式指令(实测使睫毛/织物/金属反光细节识别率提升3.2倍)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney图像放大与细节增强 Midjourney v6 及后续版本原生支持高分辨率图像生成与智能细节增强&#xff0c;其核心能力不仅依赖于模型权重&#xff0c;更通过 --zoom 2、--style raw 和 --s 750 等参…...

借助PD协议分析仪洞悉Type-C充电握手全流程

1. 为什么需要PD协议分析仪&#xff1f; Type-C接口如今已经成为手机、笔记本等设备的标配&#xff0c;但很多用户都遇到过这样的尴尬&#xff1a;买了个第三方充电器&#xff0c;插上设备后要么完全没反应&#xff0c;要么只能以5V慢充。这背后往往是因为PD&#xff08;Power …...

DownKyi终极指南:简单快速获取B站8K超高清视频的完整解决方案

DownKyi终极指南&#xff1a;简单快速获取B站8K超高清视频的完整解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等…...

基于MCP协议与本地全文检索的电子元件文档AI查询系统

1. 项目概述&#xff1a;为LLM构建一个本地化的电子元件文档搜索引擎如果你是一名嵌入式工程师、硬件开发者&#xff0c;或者像我一样&#xff0c;经常需要和德州仪器&#xff08;TI&#xff09;、意法半导体&#xff08;ST&#xff09;、亚德诺&#xff08;ADI&#xff09;这些…...

别再手动加下划线了!AD原理图封装库字体设置,这个隐藏功能一键搞定

Altium Designer原理图封装库字体设置&#xff1a;高效处理上下划线的专业技巧 在硬件设计领域&#xff0c;原理图符号的规范性和一致性直接影响团队协作效率和设计质量。Altium Designer作为行业主流EDA工具&#xff0c;其字体自定义功能常被工程师忽视&#xff0c;特别是处理…...