简写
OC的语法一直被认为比较麻烦,绝大多数的消息发送都带有很长的函数名。其实这是一把双刃剑,好的方面,它使得代码相当容易阅读,因为几乎所有的方法都是以完整的英语进行描述的,而且如果遵守命名规则的话,参数类型和方法作用也一清二楚,但是不好的方面,它使得coding的时候要多不少不必要的键盘敲击,降低了开发效率。Apple意识到了这一点,在新的LLVM中引入了一系列列规则来简化OC。经过简化后,以降低部分可读性为代价,换来了开发时候稍微快速一些,可以说比较符合现在短开发周期的需要。简化后的OC代码的样子向Perl或者Python这样的快速开发语言靠近了一步,至于实际用起来好不好使,就还是仁智各异了…至少我个人对于某些简写不是特别喜欢..大概是因为看到简写的代码还没有形成直觉,总要反应一会儿才能知道这是啥…
NSNumber 所有的[NSNumber numberWith…:]方法都可以简写了:
- [NSNumber numberWithChar:‘X’] 简写为 @‘X’;
- [NSNumber numberWithInt:12345] 简写为 @12345
- [NSNumber numberWithUnsignedLong:12345ul] 简写为 @12345ul
- [NSNumber numberWithLongLong:12345ll] 简写为 @12345ll
- [NSNumber numberWithFloat:123.45f] 简写为 @123.45f
- [NSNumber numberWithDouble:123.45] 简写为 @123.45
- [NSNumber numberWithBool:YES] 简写为 @YES
嗯…方便很多啊~以前最讨厌的就是数字放Array里还要封装成NSNumber了…现在的话直接用@开头接数字,可以简化不少。
NSArray 部分NSArray方法得到了简化:
- [NSArray array] 简写为 @[]
- [NSArray arrayWithObject:a] 简写为 @[ a ]
- [NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]
可以理解为@符号就表示NS对象(和NSString的@号一样),然后接了一个在很多其他语言中常见的方括号[]来表示数组。实际上在我们使用简写时,编译器会将其自动翻译补全为我们常见的代码。比如对于@[ a, b, c ],实际编译时的代码是
3 |
id objects[] = { a, b, c }; |
4 |
NSUInteger count = sizeof (objects)/ sizeof (id);
|
5 |
array = [NSArray arrayWithObjects:objects count:count]; |
需要特别注意,要是a,b,c中有nil的话,在生成NSArray时会抛出异常,而不是像[NSArray arrayWithObjects:a, b, c, nil]那样形成一个不完整的NSArray。其实这是很好的特性,避免了难以查找的bug的存在。
NSDictionary
既然数组都简化了,字典也没跑儿,还是和Perl啊Python啊Ruby啊很相似,意料之中的写法:
- [NSDictionary dictionary] 简写为 @{}
- [NSDictionary dictionaryWithObject:o1 forKey:k1] 简写为 @{ k1 : o1 }
- [NSDictionary dictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }
和数组类似,当写下@{ k1 : o1, k2 : o2, k3 : o3 }时,实际的代码会是
2 |
id objects[] = { o1, o2, o3 }; |
3 |
id keys[] = { k1, k2, k3 }; |
4 |
NSUInteger count = sizeof (objects) / sizeof (id);
|
5 |
dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; |
Mutable版本和静态版本
上面所生成的版本都是不可变的,想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。比如
1 |
NSMutableArray *mutablePlanets = [@[ |
2 |
@\\ "Mercury\\" , @\\ "Venus\\" ,
|
3 |
@\\ "Earth\\" , @\\ "Mars\\" ,
|
4 |
@\\ "Jupiter\\" , @\\ "Saturn\\" ,
|
5 |
@\\ "Uranus\\" , @\\ "Neptune\\" ]
|
另外,对于标记为static的数组(没有static的字典..哈希和排序是在编译时完成的而且cocoa框架的key也不是常数),不能使用简写为其赋值(其实原来的传统写法也不行)。解决方法是在类方法+ (void)initialize中对static进行赋值,比如:
1 |
static NSArray *thePlanets;
|
3 |
if (self == [MyClass class ]) {
|
4 |
thePlanets = @[ @\\ "Mercury\\" , @\\ "Venus\\" , @\\ "Earth\\" , @\\ "Mars\\" , @\\ "Jupiter\\" , @\\ "Saturn\\" , @\\ "Uranus\\" , @\\ "Neptune\\" ];
|
下标
其实使用这些简写的一大目的是可以使用下标来访问元素:
- [array objectAtIndex:idx] 简写为 array[idx];
- [array replaceObjectAtIndex:idx withObject:newObj] 简写为 array[idx] = newObj
- [dic objectForKey:key] 简写为 dic[key]
- [dic setObject:object forKey:key] 简写为 dic[key] = newObject
很方便,但是一定需要注意,对于字典用的也是方括号[],而不是想象中的花括号{}。估计是想避免和代码块的花括号发生冲突吧…简写的实际工作原理其实真的就只是简单的对应的方法的简写,没有什么惊喜。 但是还是有惊喜的..那就是使用类似的一套方法,可以做到对于我们自己的类,也可以使用下标来访问。而为了达到这样的目的,我们需要实现以下方法, 对于类似数组的结构:
1 |
- (elementType)objectAtIndexedSubscript:(indexType)idx; |
3 |
- ( void )setObject:(elementType)object atIndexedSubscript:(indexType)idx;
|
对于类似字典的结构:
1 |
- (elementType)objectForKeyedSubscript:(keyType)key; |
3 |
- ( void )setObject:(elementType)object forKeyedSubscript:(keyType)key;
|
分享到:
相关推荐
首先,"OC Controls"是Overclocking(超频)的缩写,意味着这个应用程序不仅局限于灯光控制,还提供了对硬件性能的微调功能。用户可以通过此应用调整CPU、GPU等核心组件的频率,以获得更高的运行速度,满足极致的...
OC是Objective-C的缩写,它是苹果平台的主要编程语言,特别是在iOS和macOS的开发中。 在【压缩包子文件的文件名称列表】"Learn Objective-C Samples"中,我们可以推测这个压缩包可能包含了一些Objective-C的示例...
标题中的"OC.rar_OC"可能指的是与Objective-C编程语言相关的内容,因为OC是Objective-C的常见缩写。Objective-C是一种广泛用于iOS和macOS开发的面向对象的编程语言,它是C语言的超集,增加了面向对象特性和消息传递...
在标签中,“OC”可能是Objective Function的简写,指的是目标函数,这是优化问题中的关键元素,用于衡量设计方案的优劣。结合“拓扑优化”的标签,我们可以推断这个项目可能包含了一个针对结构拓扑的目标函数优化...
光耦合器(Optical Coupler,简称光耦,英文缩写为OC)是一种常用的电子元器件,通常应用于开关电源电路中,其核心功能在于实现电信号的光电隔离传输。这种设备能够有效地在输入端和输出端之间建立一个绝缘屏障,...
- **缩写**:只使用那些广泛认可的缩写,例如`ip`、`http`、`msg`等,避免自行创造缩写词。 #### 六、注释 - **文件注释**:在`.h`文件的`@interface`之前添加创建者、创建日期和简要描述。例如: ```objc /** *...
"光耦合器(Optical Coupler)" 光耦合器是一种以光为媒介来传输电信号的器件,通常由红外线发光二极管(LED)和光敏半导体管组成。它可以实现“电—光—电”转换,具有体积小、寿命长、无触点、抗干扰能力强、输出...
1. `lk3D.m`:可能是一个计算结构刚度矩阵的函数,"lk"可能是“linear stiffness”的简写,用于描述结构的弹性特性。 2. `top3D.m`:可能对应于三维拓扑优化的主要算法实现,"top"可能代表“topology”。 3. `FE3D.m...
1. "q8051":可能是一个与8051相关的软件或程序,或者是一个关于8051的特定问题或项目的简写。由于没有更多的上下文,具体用途无法详细解释。 2. "step-mxo2v2.2原理图.pdf":这似乎是一个关于MXO2系列FPGA的版本2.2...
"OC"是Overclocking的缩写,指的是通过手动调整硬件参数来超越制造商规定的默认工作频率,以提高系统性能。"lock-70mv"可能表示此版本的超频配方锁定了CPU电压在70毫伏,以确保稳定性和避免过高的电压导致的硬件损坏...
"MFT"可能代表开发者或团队的缩写,而"Cool"则强调了库的创新和吸引力。 根据以上信息,我们可以深入探讨以下几个知识点: 1. **Objective-C语言**:OC是苹果平台的主要开发语言之一,它基于C语言并引入了面向对象...
Objective-C(通常缩写为OC)是一种面向对象的编程语言,主要应用于iOS和macOS平台的软件开发。它由Brad Cox基于Smalltalk语言改进而来,并由Tom Love进一步发展,最终在1986年由Stepstone公司发布。Objective-C以其...
"OC"是OpenCore的缩写,这是一个启动加载器,允许用户在非苹果硬件上安装苹果的操作系统。 "黑苹果"是社区对在非苹果品牌电脑上安装Mac OS的非官方称呼,这个术语反映了这个操作的非标准性质。通常,这需要对硬件...
Object-C,通常简写为ObjC或OC,是一种基于C语言的面向对象编程语言。它不仅保留了C语言的强大特性,还融入了面向对象编程的灵活性和便利性。自1980年代初由Brad Cox发明以来,Object-C迅速成为了开发Mac OS X、iOS...
电子元件英文缩写 常用电子元件英文缩写是电子技术中非常重要的一部分,了解这些缩写可以帮助我们更好地理解电子电路的工作原理和设计。下面是常用电子元件英文缩写的详细解释: 1. 电源:Voltage Source(VS) ...
Objective-C(通常缩写为Obj-C或OC)是一种通用的编程语言,它主要被用于苹果公司的操作系统,如macOS和iOS,以及它们的应用开发框架,如Cocoa和Cocoa Touch。Objective-C是C语言的一个超集,这意味着它包含了C语言...
* OC48:光缆通信 * SDH:同步数字复用 * WDH:波分复用 十、ADSL * ADSL:不对称数字用户服务线 * HFE/HFC:结构和 Cable-modem 机顶盒 十一、PCS * PCS:便携式智能终端 十二、CODEC * CODEC:编码解码器 * ...
Objective-C (OC) 代码规范是为了提高代码的可读性、可维护性和团队协作效率而制定的一套标准。以下是对给定文件中提到的几个关键点的详细解释: 1. **文件注释**:文件头部通常包含文件名、项目名称、创建者、创建...
### 过电流(OC - Overcurrent) 过电流是指电路中的电流超过其额定值,可能导致元件损坏或火灾,需要通过熔断器或断路器等保护措施来避免。 ### 过载断路器(OCB - Overload Circuit Breaker) OCB是一种自动保护...
- OC (Occupied Clean):房间已被占用且已清洁。 - OD (Occupied Dirty):房间已被占用但需要清洁。 - PMU (Please Make Up):请求清洁服务。 - DND (Do Not Disturb):请勿打扰。 - OS (OutOfService):房间不可...