Objective-C语言的数据类型
Objective-C数据类型详解
Objective-C是一种面向对象的编程语言,主要用于macOS和iOS应用程序的开发。作为C语言的超集,Objective-C继承了C语言的基本数据类型,同时也引入了一些独特的特性。本文将对Objective-C的各种数据类型进行详细的介绍,以帮助读者更好地理解和使用这种语言。
一、基本数据类型
1. 整型(Integer Types)
整型用于表示整数。在Objective-C中,整型有多种表示方式,主要包括int
、long
、short
和char
等。
-
int:常用的整型,通常占用4字节。可以表示的范围为-2,147,483,648至2,147,483,647。
-
long:长整型,通常占用4或8字节,具体依赖于平台。对于32位系统,它与
int
相同;在64位系统中,long
通常为8字节。 -
short:短整型,通常占用2字节。表示范围为-32,768至32,767。
-
char:字符型,通常占用1字节。用于存储单个字符,也可以作为整型使用,表示范围为-128至127(当为signed时)。
2. 浮点型(Floating Point Types)
用于表示带小数的数值,主要包含float
和double
。
-
float:单精度浮点数,通常占用4字节,表示范围为1.2E-38至3.4E+38。
-
double:双精度浮点数,通常占用8字节,表示范围为2.3E-308至1.7E+308。
double
可以提供更高的精度,适合需要高精度计算的场合。
3. 布尔型(Boolean Type)
布尔型用于表示逻辑值,通常使用BOOL
类型。这个类型有两个可能的值:YES
(真)和NO
(假)。在Objective-C中,BOOL
是一个signed char
类型,通常占用1字节。
4. 字符串(String)
在Objective-C中,字符串被表示为NSString
类的对象。它是一种不可变的字符串类型。当需要修改字符串时,可以使用NSMutableString
类,它是一个可变的字符串类型。
objc NSString *str = @"Hello, Objective-C!"; NSMutableString *mutableStr = [NSMutableString stringWithString:str]; [mutableStr appendString:@" Welcome!"];
二、复合数据类型
1. 数组(Array)
Objective-C中的数组使用NSArray
类表示,数组的长度是固定的,而且元素不可变。当需要创建一个可变数组时,可以使用NSMutableArray
类。
objc NSArray *array = @[@"Apple", @"Banana", @"Orange"]; NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"Apple", @"Banana", nil]; [mutableArray addObject:@"Orange"];
2. 字典(Dictionary)
字典在Objective-C中使用NSDictionary
类表示,是一种键值对集合。与数组不同,字典的元素是通过键来访问的。可变字典使用NSMutableDictionary
类。
objc NSDictionary *dict = @{@"name": @"Alice", @"age": @30}; NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; [mutableDict setObject:@"Alice" forKey:@"name"]; [mutableDict setObject:@30 forKey:@"age"];
3. 集合(Set)
集合使用NSSet
类表示,是一种无序的不重复元素集合。可变集合使用NSMutableSet
类。在许多情况下,集合比数组更有效率。
objc NSSet *set = [NSSet setWithObjects:@"Apple", @"Banana", nil]; NSMutableSet *mutableSet = [NSMutableSet set]; [mutableSet addObject:@"Apple"]; [mutableSet addObject:@"Banana"];
三、指针类型
在Objective-C中,指针的使用非常普遍。指针是用于存储变量地址的变量,这样可以直接访问内存地址中的数据。
1. 指向对象的指针
在Objective-C中,所有的对象都是通过指针来引用的。常用的指针类型是id
,它可以指向任意类型的对象。
objc id obj = @"This is an NSString object";
2. 指向基本类型的指针
指向基本类型的指针可以通过*
符号来定义。举个例子:
objc int num = 10; int *numPtr = # // numPtr是指向num的指针
为了访问指针指向的值,可以使用*
运算符。
objc NSLog(@"Value of num: %d", *numPtr); // 输出num的值
四、枚举(Enumeration Types)
枚举是一种自定义类型,允许定义一组有名字的整数常量。在Objective-C中,可以通过enum
关键字定义枚举类型。
```objc typedef NS_ENUM(NSInteger, Direction) { DirectionNorth, DirectionSouth, DirectionEast, DirectionWest };
Direction dir = DirectionNorth; ```
五、结构体(Structures)
结构体是一种用户定义的数据类型,它可以包含多种不同类型的数据。在Objective-C中,结构体通常用struct
关键字定义。
```objc struct Point { float x; float y; };
struct Point point; point.x = 10.0; point.y = 20.0; ```
也可以定义包含更多字段的结构体。
```objc struct Rectangle { struct Point origin; float width; float height; };
struct Rectangle rect; rect.origin.x = 0.0; rect.origin.y = 0.0; rect.width = 100.0; rect.height = 50.0; ```
六、协议(Protocols)
协议是一种描述某种方法集的机制,允许不同类遵循同样的接口。可以用它来定义不完全的类,从而增强代码的复用性和灵活性。
objc @protocol MyProtocol <NSObject> - (void)requiredMethod; @optional - (void)optionalMethod; @end
通过实现协议中的方法,类可以向外部表明它实现了某些功能。
```objc @interface MyClass : NSObject @end
@implementation MyClass - (void)requiredMethod { NSLog(@"This is a required method."); } @end ```
七、内存管理
Objective-C采用引用计数机制进行内存管理。每个对象都有一个引用计数,表示有多少个指针引用了这个对象。当引用计数变为0时,对象将被销毁。
- retain:增加对象的引用计数。
- release:减少对象的引用计数。
- autorelease:将对象添加到自动释放池中,待当前运行循环结束时自动释放。
从iOS 5及后来的版本开始,引入了ARC(自动引用计数),允许编译器自动管理内存。
结语
本文详细介绍了Objective-C中的各种数据类型,包括基本数据类型、复合数据类型、指针类型、枚举、结构体和协议等。同时也提到了内存管理的重要性。理解这些基本概念是学习和掌握Objective-C的重要基础。无论你是初学者还是开发者,深入了解这些数据类型可以帮助你更高效地使用Objective-C进行开发。希望这篇文章对你有所帮助!
相关文章:
Objective-C语言的数据类型
Objective-C数据类型详解 Objective-C是一种面向对象的编程语言,主要用于macOS和iOS应用程序的开发。作为C语言的超集,Objective-C继承了C语言的基本数据类型,同时也引入了一些独特的特性。本文将对Objective-C的各种数据类型进行详细的介绍…...
3d系统误差分析
系统标定重投影误差预估 在计算机视觉和三维重建领域中,评估一个相机系统标定精度的重要指标。通过比较真实的三维点在图像中的投影位置与标定模型计算出的投影位置之间的差异,来衡量标定的准确性。 以下是对这一概念的详细解析: 什么是系统…...
单片机的原理及其应用:从入门到进阶的全方位指南
以下是一篇详细、深入的“单片机的原理及其应用”博客文章示例,适合想要系统学习或深入了解单片机的读者。文中不仅会介绍单片机的基本原理、内部构造、开发流程和应用领域,还会融入更多的理论分析、实操案例以及常见问题与解决思路等,帮助读…...
在.NET用C#将Word文档转换为HTML格式
将Word文档转换为HTML格式尤其具有显著的优势,它不仅能够确保文档内容在多种设备和平台上保持一致灵活的显示,还便于通过网络进行传播和集成到各种Web应用中。随着越来越多的企业和开发者寻求更灵活、更具兼容性的文件处理方式,.NET框架下的C…...
智能学习平台系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…...
ASP .NET Core 学习(.NET9)配置接口访问路由
新创建的 ASP .NET Core Web API项目中Controller进行请求时,是在地址:端口/Controller名称进行访问的,这个时候Controller的默认路由配置如下 访问接口时,是通过请求方法(GET、Post、Put、Delete)进行接口区分的&…...
探索与创作:2024年CSDN平台上的成长与突破
文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…...
[Qualcomm]Qualcomm MDM9607 SDK代码下载操作说明
登录Qualcomm CreatePoing Qualcomm CreatePointhttps://createpoint.qti.qua...
【python_钉钉群发图片】
需求: **在钉钉群发图片,需要以图片的形式展示,如图所示:**但是目前影刀里面没有符合条件的指令 解决方法: 1、在钉钉开发者后台新建一个自建应用,发版,然后获取里面的appkey和appsecret&am…...
数据可视化:让数据讲故事的艺术
目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事:让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…...
ElasticSearch下
DSL查询 叶子查询:在特定字段里查询特定值,属于简单查询,很少单独使用复合查询:以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理: 排序:按照1个或多个字段做排序分页…...
T-SQL语言的数据库交互
T-SQL语言的数据库交互 引言 随着信息技术的不断发展,数据库在各个行业中扮演着越来越重要的角色。数据库的有效管理和优化对于企业的数据安全、效率提升和决策支持至关重要。T-SQL(Transact-SQL)作为微软SQL Server的重要扩展语言…...
.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现
前言 最近使用最新版的Serilog记录日志时,发现以前有些关于Serilog的Nuget弃用了,最关键的是有些配置写法也改变,于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明:我是用的.Net6,最新长期支持…...
[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器
目录 前言:Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件: 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件(单击&#x…...
从零开始:Gitee 仓库创建与 Git 配置指南
引言 Git 是一款广泛使用的版本控制工具,它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee(码云)是国内知名的 Git 托管平台,它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...
大文件上传的解决办法~文件切片、秒传、限制文件并发请求。。。
1、项目背景:针对大文件上传,如果将文件作为一个请求去发送给后端,会有以下几种问题,首先是上传时间长,用户不能进行其他操作,包括页面刷新等操作,其次有的接口会设置响应时间限制,可…...
如何在日常工作中使用AI
### 如何在日常工作中使用AI:提高效率与创造力 随着人工智能(AI)技术的不断发展,它已经成为我们日常工作的重要助手。无论是在准备演示文稿、进行知识搜索还是寻求技术支持方面,AI都能够提供有力的支持。本文将探讨如何…...
计算机网络 (47)应用进程跨越网络的通信
前言 计算机网络应用进程跨越网络的通信是一个复杂而关键的过程,它涉及多个层面和组件的协同工作。 一、通信概述 计算机网络中的通信,本质上是不同主机中的应用进程之间的数据交换。为了实现这种通信,需要借助网络协议栈中的各层协议&#x…...
医疗集群系统中基于超融合数据库架构的应用与前景探析
一、引言 1.1 研究背景与意义 随着医疗信息化的飞速发展,医疗数据呈爆炸式增长。从日常诊疗记录、患者病历,到各类医疗影像、检查检验数据等,海量信息不断涌现。据统计,医疗数据的年增长率高达 30% 以上 ,2025 年,全球医疗数据量将达到 2314 艾字节(EB)。如此庞大的数…...
2024年度推进可解释人工智能迈向类人智能讨论总结分享
目录 一、探索“可解释人工智能”:AI如何从“黑箱”走向“透明大师” 二、走进可解释人工智能:让AI的决策变得透明 (一)几种常见的特征导向方法 (二)像素级方法 1. 层次相关传播(LRP&#…...
【Unity】使用Canvas Group改变UI的透明度
目录 一、前言二、Canvas Group三、结合DOTween达到画面淡进的效果 一、前言 在平时开发中,可以通过控制材质、Color改变UI透明度,除此之外还可以CanvasGroup组件来控制透明度。 二、Canvas Group 官方文档链接👉👉 点击进入 …...
【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio
iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...
小例Java结合Spring框架和MyBatis ORM来实现 ERP项目中实现读写分离
前记:大家带着挑剔的眼光,多多批判和指正!🙏 在ERP项目中实现读写分离,我们可以使用Java结合Spring框架和MyBatis ORM来实现。以下是一个简化的例子,展示了如何在ERP项目中配置和使用读写分离。 一、项目…...
.gitignore配置忽略out目录
文章目录 说明操作 说明 可以结合IDEA可视化操作git,只要不删除远程仓库,如果本地操作项目出现错误,可以直接修改远程仓库的.gitignore文件,并重新拉取项目到本地。 操作 在项目根目录下找到 .gitignore 文件,打开并…...
mac 安装mongodb
本文分享2种mac本地安装mongodb的方法,一种是通过homebrew安装,一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…...
向harbor中上传镜像(向harbor上传image)
向 Harbor 中上传镜像通常分为以下几个步骤: 1、登录 Harbor 2、构建镜像 3、标记镜像 4、推送镜像到 Harbor 仓库 1、登录 Harbor 首先,确保你已经能够访问 Harbor,并且已经注册了账户。如果还没有 Harbor 账户,你需要先注册一…...
项目太大导致 git clone 失败
git克隆也分深浅,大项目clone可以先用浅克隆,只克隆源代码和最新的提交记录。 具体分两步: 1. 浅克隆 git clone https://github.com/google/mydemo.git --depth 1 只会克隆最新的一次提交,没有历史记录, 2. 拉取剩…...
开发神器之cursor
文章目录 cursor简介主要特点 下载cursor页面的简单介绍切换大模型指定ai学习的文件指定特定的代码喂给ai创建项目框架文件 cursor简介 Cursor 是一款专为开发者设计的智能代码编辑器,集成了先进的 AI 技术,旨在提升编程效率。以下是其主要特点和功能&a…...
Python爬虫学习前传 —— Python从安装到学会一站式服务
早上好啊,大佬们。我们的python基础内容的这一篇终于写好了,啪唧啪唧啪唧…… 说实话,这一篇确实写了很久,一方面是在忙其他几个专栏的内容,再加上生活学业上的事儿,确实精力有限,另一方面&…...
MySQL触发器:概念、作用
MySQL触发器:概念、作用与问题解决 在MySQL数据库管理系统中,触发器是一项强大且实用的功能。它为数据库的操作提供了一种自动化响应机制,在许多场景下极大地提升了数据管理的效率和数据的完整性。本文将深入探讨MySQL触发器是什么ÿ…...
ASP.NET Core 中基于 Cookie 的身份鉴权实现
在 ASP.NET Core 应用中,基于 Cookie 的身份鉴权是一种常见的身份验证方式,特别适用于传统的 Web 应用程序。Cookie 能够在用户的浏览器中存储身份验证数据,从而在用户访问应用的不同页面时保持登录状态。 一、配置 Cookie 身份验证 首先&a…...
从玩具到工业控制--51单片机的跨界传奇【3】
在科技的浩瀚宇宙中,51 单片机就像一颗独特的星辰,散发着神秘而迷人的光芒。对于无数电子爱好者而言,点亮 51 单片机上的第一颗 LED 灯,不仅仅是一次简单的操作,更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…...
Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数
目录 模版 先序遍历 中序遍历 后序遍历 力扣原题 相同的二叉树 力扣原题 翻转二叉树 遍历树的层数 题目 静态变量 核心逻辑 模版 // 二叉树public static class Node{public int value;public Node left;public Node right;public Node(int v) {valuev;}} 先序遍历 …...
麒麟操作系统服务架构保姆级教程(十二)keepalived高可用
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 随着业务的扩大,服务器集群也越来越大,用户多了起来就要保证用户访问,服务绝对不能宕机,那么这个时候咱们除了做灾备以外,负载均衡服务器会…...
docker 部署confluence
1.安装docker的过程就不说了。 2.下载镜像。 docker pull cptactionhank/atlassian-confluence:7.4.0 docker images 3.下载pojie 包。 https://download.csdn.net/download/liudongyang123/90285042https://download.csdn.net/download/liudongyang123/90285042 4.编写do…...
【English-Book】Go in Action目录页翻译中文
第8页 内容 前言 xi 序言 xiii 致谢 xiv 关于本书 xvi 关于封面插图 xix 1 介绍 Go 1 1.1 用 Go 解决现代编程挑战 2 开发速度 3 • 并发 3 • Go 的类型系统 5 内存管理 7 1.2 你好,Go 7 介绍 Go 玩具 8 1.3 总结 8 2 Go 快速入门 9 2.1 程序架构 10 2.2 主包 …...
奉加微PHY6230兼容性:部分手机不兼容
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...
SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输
前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …...
HJ3 明明的随机数(Java版)
一、试题地址 明明的随机数_牛客题霸_牛客网 二、试题内容 描述 对于明明生成的 nn 个 11 到 500500 之间的随机整数,你需要帮助他完成以下任务: 删去重复的数字,即相同的数字只保留一个,把其余相同的数去掉;然后…...
C++ 模拟真人鼠标轨迹算法 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
Linux-----线程同步(条件变量)
目录 相关API restrict关键字 线程间条件切换函数 条件变量pthread_cond_t 案例 在前面的锁的基础上进一步提高线程同步效率,也就是两个线程只用锁去执行的话依然会存在资源竞争的情况,也就是抢锁,这里就需要在锁的这边加上限制…...
58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
进入靶场 和2次注入的页面很像 不过养成查看源代码的好习惯 先访问source.zip 下载后解压,发现两个文件 第一个文件夹打开又有4个PHP文件 那还是先看index.php文件好了 有PHP和HTML两部分,下面是PHP部分代码(HTML太长了,先放一…...
小汽车维修记录程序(PC版)
我需要一个小程序,记录我的小车保养相关的情况:时间,地点,某种零件,以什么价格被保养使用。这样我才能清楚的知道我的小车下一次保养,然后我可以有的放矢的去准备下一次的零件和时间,避免过度保…...
回顾2024年在CSDN的成长
文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…...
AI编程工具使用技巧——通义灵码
活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…...
解读InnoDB数据库索引页与数据行的紧密关联
目录 一、快速走进索引页结构 (一)整体展示说明 (二)内容说明 File Header(文件头部) Page Header(页面头部) Infimum Supremum(最小记录和最大记录) …...
KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践
一、前言 近年来,为了满足越来越复杂的业务需求,我们从传统单体架构系统升级为微服务架构,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过 RPC 或者是 Rest 协议来进行通信,可以按照业务领域来划分成独立的单元。但是微服务系统相对…...
虚幻基础2:gameplay框架
能帮到你的话,就给个赞吧 😘 文章目录 ue框架:gameplay组成game modeactorcomponent player controllergame state 工作流程 ue框架:gameplay 组成 game mode 游戏类型和规则。可以控制游戏的开始与结束以及一些其他功能。 ac…...
在线base64转码工具
在线base64转码工具,无需登录,无需费用,用完就走。 官网地址: https://base64.openai2025.com 效果:...
2024年,我的技术探索与成长之路
2024年,我的技术探索与成长之路 2024年已经过去,作为一名技术爱好者和写作者,我回顾了过去一年在博客上记录的点滴,感慨良多。这一年,我不仅见证了技术的飞速发展,也在不断学习和实践中找到了自己的成长方向…...