总结一下,新的属性绑定规则如下:

●  除非开发者在实现文件中提供getter或setter,否则将自动生成

● 除非开发者同时提供getter和setter,否则将自动生成实例变量

●  只要写了synthesis,无论有没有跟实例变量名,都将生成实例变量

●  如开发者写了@synthesize foo;那么实例变量名就是foo

●  dynamic优先级高于synthesis

● 对于写了@dynamic的实现,所有的对应的synthesis都将不生效

@literals(简写)

在xcode4.4以前

NSNumber

所有的[NSNumber numberWith…:]方法都可以简写了:

int number;

●  [NSNumber numberWithInt:number]简写为 @(number);

●  [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

NSDictionary

●  [NSDictionary dictionary] 简写为 @{}

●  [NSDictionary dictionaryWithObject:o1forKey:k1] 简写为 @{ k1 : o1 }

●  [NSDictionarydictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }

当写下@{ k1 : o1, k2 : o2, k3 : o3 }时,实际的代码会是

// compiler generates:

id objects[] = { o1, o2, o3 };

id keys[] = { k1, k2, k3 };

NSUInteger count = sizeof(objects) / sizeof(id);

dict = [NSDictionary dictionaryWithObjects:objects forKeys:keyscount:count];

NSArray

部分NSArray方法得到了简化:

● [NSArray array] 简写为 @[]

●  [NSArray arrayWithObject:a] 简写为 @[ a ]

●  [NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]

比如对于@[ a, b, c ],实际编译时的代码是

// compiler generates:

id objects[] = { a, b, c };

NSUInteger count = sizeof(objects)/ sizeof(id);

array = [NSArray arrayWithObjects:objectscount:count];

Mutable版本和静态版本
上面所生成的版本都是不可变的,想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。比如

NSMutableArray *mutablePlanets = [@[
@"Mercury", @"Venus",
@"Earth", @"Mars",
@"Jupiter", @"Saturn",
@"Uranus", @"Neptune" ]
mutableCopy];

另外,对于标记为static的数组,不能使用简写为其赋值(其实原来的传统写法也不行)。

如果直接赋值就会提示出错

@implementation MyClass

static NSArray *  thePlanets = @[                                            error:array literals not constant

@"Mercury", @"Venus", @"Earth",

@"Mars", @"Jupiter", @"Saturn",

@"Uranus", @"Neptune"

];

解决方法是在类方法+ (void)initialize中对static进行赋值。

@implementation MyClass

static NSArray *thePlanets;

+ (void)initialize{

if (self == [MyClass class]) {

thePlanets = @[ @"Mercury", @"Venus", @"Earth", @"Mars", @"Jupiter", @"Saturn", @"Uranus", @"Neptune" ];

}

}

下标

Array

Song *oldSong = [_songs objectAtIndex:idx];

[_songs replaceObjectAtIndex:idx withObject:newSong];

可以简写为

Song *oldSong = _songs[idx];

_songs[idx] = newSong;

Dictionary

id oldObject = [_storage objectForKey:key];

[_storage setObject:newobject forKey:key];

可以简写为

id oldObject = _storage[key];

_storage[key] = newObject;

而且你不仅仅能使用它所提供的下标访问。你也可以对自定义的类使用下标访问。

对于我们自定义的类,只需要实现一下的方法就能使用下标访问。

Array

- (elementType)objectAtIndexedSubscript:(indexType)idx;

- (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;

Dictionary

- (elementType)objectForKeyedSubscript:(keyType)key;

- (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;

xcode中一些便捷用法@literals简写的更多相关文章

  1. Xcode中git的用法介绍与"Please tell me who you are"问题的解决方式

    我在之前多篇博客中解说了怎样使用命令行操作git,能够大大提高我们的工作效率.详细能够參考<Git学习札记><Git学习札记--进阶>等文章.事实上对于同一个工具,我们有不同的 ...

  2. Xcode中的约束用法

    这篇文章用几个简单的例子来介绍XCode6.1故事板中约束的使用方法.   现在iOS设备屏幕的尺寸也有很多种了,尤其是有了iPhone6 Plus以后,再不关注界面的尺寸适配就有点说不过去了.   ...

  3. Xcode中的变量模板(variable template)的用法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 你可能经常会写一些小的代码片段,里面自然少不了一些关键的变量. ...

  4. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  5. OC Xcode中常见的错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  6. 一个CSS中Z-index的用法

    一个CSS中Z-index的用法 CSS教程:彻底掌握Z-index属性     大多数的CSS属性都很容易使用.常常,当您对标记语言的元素使用CSS属性时,产生的结果会随着您刷新页面而立即呈现.而另 ...

  7. XCode中使用SVN 教程

    修改subversion.config方法: 可以直接在终端上输入:vi ~/.subversion/config来编辑. 也可以通过Finder搜索.subversion,点击下边的+号,进入高级搜 ...

  8. jQuery中on()方法用法实例详解

    这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...

  9. XCode中安装cocoapods步骤

    Ruby是一种功能强大的面向对象的脚本语言 Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找.安装.升级和卸载软件包,非常的便 ...

随机推荐

  1. 状压dp的题目列表 (一)

    状压dp的典型的例子就是其中某个数值较小. 但是某个数值较小也不一定是状压dp,需要另外区分的一种题目就是用暴力解决的题目,例如UVA818 紫书215 题目列表: ①校长的烦恼 UVA10817 紫 ...

  2. HDFS的xshell及dfsadmin命令

    一. DFS:distributied file system 是一种允许文件通过网络在多台主机上风向的文件系统,可让多机器上的多用户分享文件和存储空间 二.HDFS的shell **切记后面加的 / ...

  3. SQLSERVER数据库置疑、可疑、脱机、单用户、紧急模式等的修复

    数据库出现置疑.可疑.脱机.单用户.紧急模式主要是因为数据库的日志文件除了问题,2000和2008修复方式不一样,2008的修复脚本在2000中不适用,主要是不被2000识别. 假设数据库名为:eis ...

  4. react+redux基础用法

    在学react的是,发现一旦我们封装好了我们的组件,那么我们的项目就跟搭积木一样简单快速,可是我们发现了一个问题,在一个页面往往会嵌套很多的组件,子组件必须要通过父组件传递参数才能渲染出数据,我们回想 ...

  5. 图像转换为二进制文件存入DSP6748

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 这篇博客主 ...

  6. JS作计算器

    JavaScript制作计算器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  7. 在 C# 中通过 P/Invoke 调用Win32 DLL

    在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 | 更新日期 : 1/13/2005 Jason Clark 下载本文的代码: NET0307.exe ( ...

  8. Spring -- 注解事务 以及 7个传播行为

    注解事务: 1.开启注解事务配置: <!-- 事务管理器 --> <bean id="transactionManager" class="org.sp ...

  9. linux基础学习目录

    以下用一个表格来罗列linux默认的目录或文件及其用途: 目录/文件 用途 来源 / /处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录.文件.设备都在/之下. - / ...

  10. hit2739

    好题,回路的问题一般都要转化为度数来做若原图的基图不连通,或者存在某个点的入度或出度为0则无解.统计所有点的入度出度之差di对于di>0的点,加边(s,i,di,0):对于di<0的点,加 ...