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

●  除非开发者在实现文件中提供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. JQuery如何监听DIV内容变化

    这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...

  2. 51nod K 汽油补给 大根堆+小根堆....

    题目传送门 用优先队列瞎搞... 想着在每个地方 先算上一个点到这一个点要花费多少钱 这个用小根堆算就好 然后在这个地方加油 把油钱比自己多的替代掉 这个用大根堆维护一下 然后两个堆之间信息要保持互通 ...

  3. bzoj 1588 裸平衡树

    //By BLADEVIL #include <cstdio> #include <set> #define inf 1<<30 using namespace s ...

  4. Django【进阶】中间件

    中间件   一.概念 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 其 ...

  5. SpringMvc基础知识(二) springmvc和mybatis整合

    1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao ...

  6. Linux中实现一个简单的进度条【转】

    转自:http://blog.csdn.net/yuehailin/article/details/53999288 说起进度条,其实大家常常见到,比如说你在下载视频或文件的时候,提示你当前下载进度的 ...

  7. easyui时间控件用js实时获取选定的时间的取法

    easyui时间控件用js实时获取选定的时间的取法var   datetime=$("#id").datetimebox("getValue");不能用 $(& ...

  8. django日志的设置

    关于django的日志设置详细可以看下官方文档:https://yiyibooks.cn/xx/Django_1.11.6/topics/logging.html 示例: # 日志文件配置 LOGGI ...

  9. python特有的协程

    #转载请联系 什么是协程呢? 线程包含在进程里面,协程包含在线程里面.协程也是和进程.线程一样,可以实现多任务.协程的切换开销比线程更小,不需要保存和恢复线程的状态.最通俗易懂的说法就是,协程是就是一 ...

  10. lucene5 实时搜索

    openIfChanged public static DirectoryReader openIfChanged(DirectoryReader oldReader) throws IOExcept ...