浅析Objective-C字面量

java——字面量、常量、变量 字面量(Literal)在计算机科学中,是指在源代码中直接表示的值,这些值在编译时或运行时被直接替换为对应的内部表示,而不需要进行额外的计算或转换。字面量通常用于初始化变量或作为表达式的一部分。以下是对字面量的详细解释: 定义与用途:存储与修改:表达方式: 可变性与存储:使用方式:生命周期: 值的变化性:声明与初始化:命名约定:综上所述,字面量是编程中常用的一种表示值的方式,它们具有直接表示、固定值和类型明确等特点。在编程过程中,合理使用字面量可以提高代码的可读性和可维护性。 阅读详情

编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架。虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架。这几个类是NSString、NSNumber、NSArray、NSDictionary。从类名上即可看出各自所表示的数据结构。

Objective-C以语法繁杂而著称。事实上的确是这样。不过,从Objective-C 1.0起,有一种非常简单的方式能创建NSString对象。这就是“字符串字面量”(string literal),其语法如下:
NSString *someString = @”Effective Objective-C 2.0”;

如果不用这种语法的话,就要以常见的alloc及init方法来分配并初始化NSString对象了。在版本较新的编译器中,也能用这种字面量语法来声明NSNumber、NSArray、NSDictionary类的实例。使用字面量语法(literal syntax)可以缩减源代码长度,使其更为易读。

字面数值

有时需要把整数、浮点数、布尔值封入Objective-C对象中。这种情况下可以用NSNumber类,该类可处理多种类型的数值。若是不用字面量,那么就需要按下述方式创建实例:
NSNumber *someNumber = [NSNumber numberWithInt:1];

上面这行代码创建了一个数字,将其值设为整数1。然而使用字面量能令代码更为整洁:
NSNumber *someNumber = @1;

大家可以看到,字面量语法更为精简。不过它还有很多好处。能够以NSNumber实例表示的所有数据类型都可使用该语法。例如:
NSNumber intNumber = @1;
NSNumber 
floatNumber = @2.5f;

NSNumber doubleNumber = @3.14159;
NSNumber 
boolNumber = @YES;

NSNumber *charNumber = @’a’;

字面量语法也适用于下述表达式:

 

以字面量来表示数值十分有用。这样做可以令NSNumber对象变得整洁,因为声明中只包含数值,而没有多余的语法成分。

字面量数组

数组是常用的数据结构。如果不使用字面量语法,那么就要这样来创建数组:

 

 

而使用字面量语法来创建则是:

 

 

上面这种做法不仅简单,而且还利于操作数组。数组的常见操作就是取某个下标所对应的对象,这用字面量来做更为容易。如果不用字面量,那么通常会用“objectAtIndex:”方法:

 

若使用字面量,则是:

 

这也叫做“取下标”操作(subscripting),与使用字面量语法的其他情况一样,这种方式也更为简洁、更易理解,而且与其他语言中依下标来访问数组元素时所用的语法类似。

不过,用字面量语法创建数组时要注意,若数组元素对象中有nil,则会抛出异常,因为字面量语法实际上只是一种“语法糖”(syntactic sugar),其效果等于是先创建了一个数组,然后把方括号内的所有对象都加到这个数组中。抛出的异常会是这样:

1
2
3
4
*** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '***
-[__NSPlaceholderArray initWithObjects:count:]: attempt to
insert nil object from objects[0]'

 

在改用字面量语法来创建数组时就会遇到这个问题。下面这段代码分别以两种语法创建数组:

1
2
3
4
5
6
7
id object1 = /* ... */;
id object2 = /* ... */;
id object3 = /* ... */;

NSArray *arrayA = [NSArray array WithObjects:
                       object1, object2, object3, nil];
NSArray *arrayB = @[object1, object2, object3];

 

大家想想:如果object1与object3都指向了有效的Objective-C对象,而object2是nil,那么会出现什么情况呢?按字面量语法创建数组arrayB时会抛出异常。arrayA虽然能创建出来,但是其中却只含有object1一个对象。原因在于,“arrayWithObjects:”方法会依次处理各个参数,直到发现nil为止,由于object2是nil,所以该方法会提前结束。

这个微妙的差别表明,使用字面量语法更为安全。抛出异常令应用程序终止执行,这比创建好数组之后才发现元素个数少了要好。向数组中插入nil通常说明程序有错,而通过异常可以更快地发现这个错误。

字面量字典

“字典”(Dictionary)是一种映射型数据结构,可向其中添加键值对。与数组一样,Objective-C代码也经常用到字典。其创建方式如下:

 

这样写令人困惑,因为其顺序是<对象>,<键>,<对象>,<键>。这与通常理解的顺序相反,我们一般认为是把“键”映射到“对象”。因此,这种写法不容易读懂。如果改用字面量语法,就清晰多了:

 

上面这种写法更简明,而且键出现在对象之前,理解起来较顺畅。此范例代码还说明了使用字面量数值的好处。字典中的对象和键必须都是Objective-C对象,所以不能把整数28直接放进去,而要将其封装在NSNumber实例中才行。使用字面量语法很容易就能做到这一点,只需给数字前加一个@字符即可。

与数组一样,用字面量语法创建字典时也有个问题,那就是一旦有值为nil,便会抛出异常。不过基于同样的原因,这也是个好事。假如在创建字典时不小心用了空值对象,那么“dictionaryWithObjectsAndKeys:”方法就会在首个nil之前停下,并抛出异常,这有助于查错。

字典也可以像数组那样用字面量语法访问。按照特定键访问其值的传统做法是:

 

与之等效的字面量语法则是:

 

这样写也省去了冗赘的语法,令此行代码简单易读。

可变数组与字典

通过取下标操作,可以访问数组中某个下标或字典中某个键所对应的元素。如果数组与字典对象是可变的(mutable),那么也能通过下标修改其中的元素值。修改可变数组与字典内容的标准做法是:

 

若换用取下标操作来写,则是:

 

局限性

字面量语法有个小小的限制,就是除了字符串以外,所创建出来的对象必须属于Foundation框架才行。如果自定义了这些类的子类,则无法用字面量语法创建其对象。要想创建自定义子类的实例,必须采用“非字面量语法”(nonliteral syntax)。然而,由于NSArray、NSDictionary、NSNumber都是业已定型的“子族”(class cluster,参见第9条),因此很少有人会从其中自定义子类,真要那样做也比较麻烦。而且一般来说,标准的实现已经很好了,无须再改动。创建字符串时可以使用自定义的子类,然而必须要修改编译器的选项才行。除非你明白这样做的后果,否则不鼓励使用此选项,用NSString就足够了。

使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)。若想要可变版本的对象,则需复制一份:

 

 

这么做会多调用一个方法,而且还要再创建一个对象,不过使用字面量语法所带来的好处还是多于上述缺点的。

要点

应该使用字面量语法来创建字符串、数值、数组、字典。与创建此类对象的常规方法相比,这么做更加简明扼要。

应该通过取下标操作来访问数组下标或字典中的键所对应的元素。

 

用字面量语法创建数组或字典时,若值中有nil,则会抛出异常。因此,务必确保值里不含nil。


本文出自 “Running2snail” 博客,转载请与作者联系!

从涡流求解器到瞬态场:Maxwell 3D里无线充电仿真,选对求解器能省一半计算时间 本文深入探讨了Maxwell 3D在无线充电仿真中涡流求解器与瞬态求解器的选择策略,帮助工程师优化计算效率与精度。通过对比分析两种求解器的适用场景、性能差异及实战技巧,揭示如何根据频率特性、材料非线性和动态过程需求做出精准选择,可节省高达50%的计算时间。特别针对3D线圈模型的无线充电系统设计提供了专业建议。 阅读详情

相关推荐

【机器学习入门】1.4 吃透这些基本术语,才算真正入门

本文通过"挑西瓜"的生活案例,形象解释了机器学习的基本术语。样本对应单个西瓜,特征如色泽、根蒂等是观察维度,特征值是其具体表现,标签是西瓜的好坏判断。数据集是样本集合,特征向量是样本的数学表达,特征空间是所有可能的样本组合。文章强调数据集需划分为训练集、验证集和测试集,以评估模型的泛化能力。最后整理了术语对照表,并解答了常见问题。这些基础概念是理解机器学习的关键,建议读者重点掌握。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 653

Objective-C语法之字面量语法

今天来学习下Objective-C中的字面量语法,之前只是知道可以这样创建对象,并没有很清晰的一个总结,看过一本书之后觉得有必要摘出来,方便巩固自己的知识。 通常我们会用alloc和init方法来分配并初始化NSString对象,“字符串字面量”(string literal)提供了一种非常简单的方式创建 NSString对象,语法如下: NSString *str=@"String Lite

tyuersunshine的博客 2119

DIY一个SM2262ENG 2TB Nvme固态硬盘,慧荣SM2262EN主控

网友订做的 材料: 慧荣科技的62en,2片1G 三星DDR4缓存,4颗PF29F04T2AOCTH1,8CE B17A。SM2262EN属于慧荣第二代PCIe SSD主控,支持PCIe G3×4通道和全新的NVMe 1.3规范、8个NAND通道设计,并提供完整固件设计,最大循序读取速度高达3.5GB/s,循序写入速度达3.0GB/s,随机读写则高达420K IOPS和420K IOPS。此外,还采用目前最先进的低功耗设计,无论是在待机还是在工作状态下,均展现超低功耗,有效减少30%的功耗,满足用户追求超

m0_55207244的博客 1万+

字面量语法的常规用法

第一、字面数值 复杂方法: NSNumber *someNumber=[NSNumber numberWithDouble:3.4]; NSLog(@"the value is %@",someNumber); 替代方法: NSNumber *a=@21.3; NSNumber *b=@32; NSLog(@"the value is %@",a); NSLog(@"the val

LXL_815520的博客 788

手把手教你用FPGA+AD9822搭建300DPI的CIS高速图像采集系统(附时序调试心得)

本文详细介绍了如何利用FPGA作为核心控制器,结合AD9822三通道采样保持放大器/ADC,构建一套完整的300DPI CIS高速图像采集系统。内容涵盖从CIS传感器驱动时序、AD9822寄存器配置与协同调试,到采用千兆以太网替代USB实现稳定高速数据传输的完整实战指南,并分享了关键的时序调试心得与系统集成经验。

weixin_29306261的博客 133

立创开源4G+GPS定位系统:基于微信小程序的低成本低功耗追踪方案

本文介绍了一个基于立创开源平台的超小型4G+GPS定位系统方案。该方案采用28mm*28mm主板,集成4G Cat.1通信与GPS定位,通过微信小程序“点灯专家”实现远程追踪管理,具备低成本、低功耗、易于部署的特点,适用于电动车、宠物、资产追踪等多种场景。

weixin_28895791的博客 394

11——Java基础语法:字面量

Java字面量就是告诉程序员们,数据在程序中的书写格式

yelitoudu的博客 447

基于咸鱼最新九宫格图标验证码的语义增强模型识别

本文探讨了破解复杂验证码的技术思路,重点分析了某平台的九宫格验证码应对策略。作者提出通过图像语义抽取和增强技术来扩充数据集:先采集少量真实样本,利用形态学操作进行前增强生成变形图像,再通过叠加背景噪声进行后增强。同时强调真实数据集的重要性,建议采用真实+生成数据的混合训练方法。实验表明该方法可使模型准确率达到95%以上,但作者特别声明本文仅供技术研究,严禁用于非法用途。

码王吴彦祖的博客 601

Objective-C 基础之强大的字面量

Objective-C 基础之强大的字面量 Objective-C对字面量的支持其实是很到位的。看到C#的字典可以用[]来取值就觉得很爽,现在发现Objective-C也非常的不错,接下来说一说Objective-C的字面量。 1、用字面量初始化字符串(NSString) 一般我们初始化字符串都是这样写 NSString* str = [NSString stringWithS

hahahakonghee的专栏 679

2026年GESP3月认证C++五级真题解析

因为要合并成升序数组,所以当A[i]小于等于B[j]时,取A[i],否则取B[j]。当a[i]>a[j]时,左边数组中从i到m的所有元素都大于a[j],因此逆序对数量增加m-i+1。给定一个包含n个互不相同的正整数的数组A与一个包含m个互不相同的正整数的数组B,请你帮忙计算有多少个数在数组A与数组B中均出现。下面代码实现两个整数除法,其中被除数为一个“大整数”,用字符串表示,除数是一个小整数,用int表示,则横线处应该填写()。且a[i] > a[j],则a[i]和a[j]是一个逆序对。

lan_in的博客 118

基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

基于NB-IoT技术的城市道路智慧路灯监控系统,在每个照明节点上安装一个集成了NB-IoT模组的单灯控制器,单灯控制器再经运营商的网络,与路灯控制平台实现双向通信,路灯控制平台直接对每个灯进行控制,包括开关灯控制、光照检测、自动调节明暗、电耗分析等操作。

不脱发的程序猿 5万+

JavaScript 数据拷贝

JavaScript 两种数据类型的存储方式以及变量拷贝方法

清晨-阳光的博客 2560

18、项目运行与调试全攻略

本文详细介绍了在IntelliJ IDEA中进行项目运行与调试的完整流程,涵盖运行配置的创建与管理、临时配置的使用与保存、运行窗口的控制台操作及多程序并行运行的处理。同时,讲解了如何通过调试器定位和修复语法错误、运行时错误及逻辑错误,并结合ACME项目演示了第三方库Log4J的集成方法和命令行客户端的功能改进。文章还提供了调试流程图,帮助开发者系统掌握IDEA的强大调试功能,提升开发效率与代码质量。

svm4gardener的博客 75

Swift之加载本地或者网络GIF图片

// // YDWGIFView.swift // Project // // Created by cptech on 2017/6/19. // Copyright © 2017年 CPTECH_ydw. All rights reserved. //import UIKit import ImageIO import QuartzCoreclass YDWGIFView: UIView

╰つ栺尖篴夢ゞ 6104

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Python入门篇】——Python基础语法(字面量注释与变量)

Python基础语法(字面量注释与变量)

2201_75366661的博客 2235

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JavaScript基础教程(十一)语法之字面量:JS字面量,藏在代码里的『语法糖刺客』?

JavaScript字面量是直接出现在代码中的基础数据值表示法,堪称最简洁高效的数据创建方式。本文深度解析对象、数组、字符串等七大字面量类型,通过实用示例揭示其语法本质与性能优势。字面量不仅是语法糖,更是提升代码可读性和执行效率的关键武器,掌握它们将彻底改变你的编码方式!

jxf_jxfcsdn的博客 313

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入解析 JavaScript 对象字面量:语法、特性与最佳实践

可以在对象字面量中使用简洁的方法定义语法,省略冒号和 `function` 关键字,例如 `sayHello() {}` 等同于 `sayHello: function() {}`。- `sayHello: function() {...}` 定义了一个名为 `sayHello` 的方法,它是一个函数。- `name: "John"` 定义了一个名为 `name` 的属性,其值为 `"John"`。- `age: 30` 定义了一个名为 `age` 的属性,其值为 `30`。

m0_57836225的博客 636

spring笔记

一、spring简介 spring是一个设计型框架。其中有两个核心IOC(DI)和AOP。 二、搭建spring框架 1、创建Java工程 2、导入jar commons-logging-1.1.3.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar 3、在src下创建spring的配置文件 4

weixin_51509525的博客 196

高效Objective-C语法-字面量语法

NSString对象从Objective-C 1.0开始,有一种简单的方式能创建NSString对象,这就是”字符串字面量”,语法如下:NSString *str = @"hello word!";如果不用这种语法的话,就要使用常见的alloc和init来分配并初始化NSString对象。使用字面量语法能够缩短源代码长度,使其更为易读。字面数值NSNumber有时候需要将整数,浮点数,布尔变量存入O

马玉文的博客 725

简洁的字面量语法

因为之前登陆错误账号的原因,原有账号已被弃用,所以文章要转到这里来。 我们使用Xcode开发程序时,总会用到几个Foundation框架的类:NSString、NSNumber、NSArray、NSDictionary。由于OC是C语言的超集,所以上诉的这几个类也完全能用C语言实现相同的功能,但是实际应用中这几个类也总是我们代码中的常客。另一方面,OC以语法繁杂而著称,例如我们使用NSS

慢跑蜗牛的专栏 686

字面量语法是什么

例如:NSNumber *number;number = @123445;//整形 number = @'adfasdf';//字符串NSArray *array;array = [1,2,3,4];需要注意的是:没有可以用来创建NSMutableArray对象的字面量语法,当然也包括-NSMutableString 、NSMutableDictionary都没有字面量语法。

meiyulong518的博客 1531

什么是字面量

字面量的解释 官方解释: 在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面量表示法。 我的看法: 1.手动声明一个对象的属性和方法,而不是通过构造函数,这样声明简单,但不能复用。 2.表达的信息如字面所示,再通俗点就是表达的信息就是它自己。 3.比如字符串

K982869292的博客 7332

字面量(语法糖)

字面量 转载于:https://www.cnblogs.com/bachl/p/4703374.html

aoshou6246的博客 177

字面量到底是啥

1.字面量就是由字母,数字等构成的字符串或者数值,她只能作为右值(等号右边的值) 或者说是用于表达源代码中一个固定值的表示法 例 int a=8 8就是右值 就是字面量 2.整数,浮点数,以及字符串等都是字面量,有很多对布尔类型和字符类型的值也支持字面量的表示,还有一些甚至对枚举类型的元素和类似数组,记录和对象等复合类型的值也支持字面量的表示法 ...

weixin_57633124的博客 7612

Java学习笔记01 ── Spring(IOC 上)

目录框架的介绍Spring框架Spring项目的初体验加入jar包创建xml文件创建Person对象,对其初始化并获取它创建person类编辑xml文件获取对象默认单例IOC和DIIOCDIApplicationContext给bean属性赋值注入的方式字面量属性对象属性数组属性list属性map属性FactoryBean 框架的介绍 今天开始学习Spring框架。首先框架是一种规范,是用来支撑我...

qq_41835640的博客 851
上一篇: OC中Block语法、Block使用以及通过Block实现数组排序
RunningSnail2
博客等级 码龄12年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值