`
119568242
  • 浏览: 420305 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

OC简写

    博客分类:
  • ios
 
阅读更多
简写 
    OC的语法一直被认为比较麻烦,绝大多数的消息发送都带有很长的函数名。其实这是一把双刃剑,好的方面,它使得代码相当容易阅读,因为几乎所有的方法都是以完整的英语进行描述的,而且如果遵守命名规则的话,参数类型和方法作用也一清二楚,但是不好的方面,它使得coding的时候要多不少不必要的键盘敲击,降低了开发效率。Apple意识到了这一点,在新的LLVM中引入了一系列列规则来简化OC。经过简化后,以降低部分可读性为代价,换来了开发时候稍微快速一些,可以说比较符合现在短开发周期的需要。简化后的OC代码的样子向Perl或者Python这样的快速开发语言靠近了一步,至于实际用起来好不好使,就还是仁智各异了…至少我个人对于某些简写不是特别喜欢..大概是因为看到简写的代码还没有形成直觉,总要反应一会儿才能知道这是啥… 
 
NSNumber 所有的[NSNumber numberWith…:]方法都可以简写了:
[cpp] view plaincopy
 
  1. [NSNumber numberWithChar:‘X’] 简写为 @‘X’;  
  2. [NSNumber numberWithInt:12345] 简写为 @12345  
  3. [NSNumber numberWithUnsignedLong:12345ul] 简写为 @12345ul  
  4. [NSNumber numberWithLongLong:12345ll] 简写为 @12345ll  
  5. [NSNumber numberWithFloat:123.45f] 简写为 @123.45f  
  6. [NSNumber numberWithDouble:123.45] 简写为 @123.45  
  7. [NSNumber numberWithBool:YES] 简写为 @YES  

嗯…方便很多啊~以前最讨厌的就是数字放Array里还要封装成NSNumber了…现在的话直接用@开头接数字,可以简化不少。
 
NSArray 部分NSArray方法得到了简化:
[html] view plaincopy
 
  1. [NSArray array] 简写为 @[]  
  2. [NSArray arrayWithObject:a] 简写为 @[ a ]  
  3. [NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]  
    
    可以理解为@符号就表示NS对象(和NSString的@号一样),然后接了一个在很多其他语言中常见的方括号[]来表示数组。实际上在我们使用简写时,编译器会将其自动翻译补全为我们常见的代码。比如对于@[ a, b, c ],实际编译时的代码是
1 // compiler generates:
2  
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啊很相似,意料之中的写法:
[html] view plaincopy
 
  1. [NSDictionary dictionary] 简写为 @{}  
  2. [NSDictionary dictionaryWithObject:o1 forKey:k1] 简写为 @{ k1 : o1 }  
  3. [NSDictionary dictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }  
 
    和数组类似,当写下@{ k1 : o1, k2 : o2, k3 : o3 }时,实际的代码会是
1 // compiler generates:
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\\" ]
6                                   mutableCopy];
另外,对于标记为static的数组(没有static的字典..哈希和排序是在编译时完成的而且cocoa框架的key也不是常数),不能使用简写为其赋值(其实原来的传统写法也不行)。解决方法是在类方法+ (void)initialize中对static进行赋值,比如:
 
1 static NSArray *thePlanets;
2 + (void)initialize {
3     if (self == [MyClass class]) {
4         thePlanets = @[ @\\"Mercury\\", @\\"Venus\\", @\\"Earth\\", @\\"Mars\\", @\\"Jupiter\\", @\\"Saturn\\", @\\"Uranus\\", @\\"Neptune\\" ];
5     }
6 }
 
下标 
    其实使用这些简写的一大目的是可以使用下标来访问元素:
[html] view plaincopy
 
  1. [array objectAtIndex:idx] 简写为 array[idx];  
  2. [array replaceObjectAtIndex:idx withObject:newObj] 简写为 array[idx] = newObj  
  3. [dic objectForKey:key] 简写为 dic[key]  
  4. [dic setObject:object forKey:key] 简写为 dic[key] = newObject  
 
    很方便,但是一定需要注意,对于字典用的也是方括号[],而不是想象中的花括号{}。估计是想避免和代码块的花括号发生冲突吧…简写的实际工作原理其实真的就只是简单的对应的方法的简写,没有什么惊喜。 但是还是有惊喜的..那就是使用类似的一套方法,可以做到对于我们自己的类,也可以使用下标来访问。而为了达到这样的目的,我们需要实现以下方法, 对于类似数组的结构:
 
1 - (elementType)objectAtIndexedSubscript:(indexType)idx;
2  
3 - (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;
 
 对于类似字典的结构:
 
1 - (elementType)objectForKeyedSubscript:(keyType)key;
2  
3 - (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;
分享到:
评论

相关推荐

    光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦

    4n25 光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦

    光耦耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦,是开关电源电路中常用的器件。

    耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦,是开关电源电路中常用的器件。

    门门接线方式(集电极开路式)

    OC门是Open Collector的缩写,意为集电极开路式的接线方式,其利用晶体管的特性达到控制状态的目的,它是有源的开关量输出,必须外界上拉电阻和电源才能将开关电平作为高低电平用。所以又叫做驱动门电路。 (1)...

    对有学习障碍的儿童使用 WISC-R 的缩写版本

    Oc!okr 1986 中使用 WISC-R 的缩写版本与学习障碍儿童 Psyrhologv 使用 WISC-R 的缩写版本与学习障碍儿童 DEBORAH LEE WADE,LEADELLASCOPH 大学密苏里-哥伦比亚大学使用韦克斯勒概述的标准评估程序和格式,对 56 名...

    光耦参数选型重要指标-CTR

    光耦全称是光耦合器,英文缩写为OC,亦称光电隔离器,简称光耦。下文为大家介绍一下光耦参数选型重要指标-CTR。

    I2C总线简介

    I²C 是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee" , 它是一种两线接口。 I²C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。 SCL:上升沿将数据...

    document.getElementById的简写方式(获取id对象的简略写法)

    比如用_$(id)代替document.getElementById(id). 如果是纯粹的代替可以使用下面的代码 代码如下: function $(id){document.getElementById(id)} 个人比较推荐用prototype中对document.getElementById的定义: 代码如下...

    采用OPA128的精密光电检测电路

    光电隔离器(optoelectronic isolator,英文缩写为OC)亦称光电耦合器、光耦合器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。 如...

    详解:光耦电路设计需知.pdf

    光电耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光耦合器,简称光耦。由于它具有体积小、寿命长、无触点,抗干扰能力

    CMOS接口电路

    光电耦合器(optical coupler,英文缩写为OC)亦称光耦合器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。

    光耦的理解及应用技术文档

    光耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。目前它已成为种类最多、用途最...

    两列CMOS接口电路分享

    光电耦合器(opticalcoupler,英文缩写为OC)亦称光耦合器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。目前它已成为种类最多、用途最广...

    React Native自定义组件与输出方法详解

    简介 如果你看的这一篇,需要你对ReactNative的开发有一定的了解,此文...native module就是实现了RCTBridgeModule协议的OC类.RCT就是ReaCT的缩写. 具体步骤如下 引入#import 类,然后遵守RCTBridgeModule协议. 实现RCT_

    传感技术中的光耦参数选型重要指标-CTR

    光耦全称是光耦合器,英文名字是:optical coupler,英文缩写为OC,亦称光电隔离器,简称光耦。  光耦的技术参数主要有发光二极管正向压降VF、正向电流IF、电流传输比CTR、输入级与输出级之间的绝缘电阻、集电极-...

    通信与网络中的SONET/SDH光网络概念

    SONET是同步光纤网络的缩写,最初是在20世纪80年代由Bellcore提出的,第一批光网络从那之后开始出现。现在是一个ANSI的光纤传输系统标准。SONET定义接口的标准位于OSI七层模型结构的物理层,这个标准定义了接口速率的...

    浅谈100G光传送时代的来临

    DWDM是Dense Wavelength Division Multiplexing(密集波分复用)的缩写,这是一项用来在现有的光纤骨干网上提高带宽的激光技术。更确切地说,该技术是在一根指定的光纤中,多路复用单个光纤载波的紧密光谱间距,以便...

    通信与网络中的浅谈100G光传送时代的来临

    DWDM是Dense Wavelength Division Multiplexing(密集波分复用)的缩写,这是一项用来在现有的光纤骨干网上提高带宽的激光技术。更确切地说,该技术是在一根指定的光纤中,多路复用单个光纤载波的紧密光谱间距,以便...

    基础电子中的光电耦合器的入门知识讲解

     光电耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。光电耦合器是以光为媒介传输电信号的一种电一光一电转换器件.它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,...

Global site tag (gtag.js) - Google Analytics