`

几个有用的Objective-C新特性

    博客分类:
  • IOS
 
阅读更多

Objective-C已经稳定在TIOBE编程语言排行榜前五名,2010年刚接触Objective-C还是因为公司在搞Mac版企业IM开发,那时候OC还几乎无人问津,这些年倒是风光无限,只能感叹当初踩对点了,不清楚未来10年又会有哪些语言流行起来,下一个会不会是go?。这几年来Objective-C的进化速度也是非常快,Apple不断添加新的特性到Objective-C,例如ARC、Block等,以下挑些个人感觉对开发效率影响比较大的新特性来说:

不用再写sythesize

以前声明属性Property,都要在类的实现@implementation里将属性和成员变量做相应的synthesize,synthesize的含义是将属性和成员变量做关联。早期声明一个属性,需要同样声明一个成员变量,然后@synthersize date=_date;将属性与成员变量关联起来,后来可以无需声明成员变量,@synthersize date=_date;可以自动帮你声明一个名字为_date的成员变量,@synthersize date就是自动声明一个成员变量date。

Xcode4.4以后,synthesize关键字也不需要写了,例如@property (nonatomic, readwrite, retain) NSDate *date;编译器可以自动绑定并且生成对应的成员变量NSDate *_date,相当于是自动添加了@synthesize date=_date;。这样既不用再声明成员变量,也不要费神写@synthesize,方便不少。

当然凡事有例外,如果同时实现了setter和getter方法,例如上面你实现了-(void)setDate-(NSDate *)date,那么编译器就不会自动帮你synthesize。这里同时实现setter和getter方法是针对readwrite属性来说的,对于readonly属性,那么你实现了getter方法即-(NSDate *)date也同样不会自动绑定成员变量。

成员方法的顺序

以前在.m实现文件中实现方法时经常会引用其他成员方法,而如果引用的成员方法未在头文件或者匿名catrgory中声明,同时也不在引用者前面,那么编译器会报未找到该方法的错误。现在新的编译器中,只要在实现文件里的成员方法,在其他任何位置的方法中调用都不再报错,Nice!

不一样的NSNumber、NSArray和NSDictionary

最新的OC语法里还添加了许多类似脚本语言的特性,例如以前要生成NSNumber满费劲,都是[NSNumber numberWith***]的写法,太多冗余。现在方便了,可以用@符号替代,例如[NSNumber numberWithChar:‘c’]可以直接表示为@'c'[NSNumber numberWithInt:123]直接表示为@123[NSNumber numberWithFloat:1.23f]z直接写为@1.23f,其他类型同理变换。

NSArray的变化也是类似的,[NSArray array]就是@[][NSArray arrayWithObject:x]就是 @[x][NSArray arrayWithObjects:x, y, z, nil]就是@[x, y, z],不过这种方式生成的是NSArray,要生成NSMutableArray呢?也简单,直接调用mutableCopy即可,例如[@[x, y, z] mutableCopy]。如果要访问第1个元素,以前需要写成[array objectAtIndex:0],现在可以直接用array[0]访问,像极了脚本语言。

NSDictionary的变化和NSArray类似,不同的是用@{},例如[NSDictionary dictionaryWithObject:value forKey:key]可以表示为@{key: value}。访问时也和大多数脚本语言一样,用dict[key]来获得键值对应的值。

至于以上简化的方法到底要不要用,还是看自己或者项目组的习惯了,个人建议是在符合统一编码规范的情况下,尽量拥抱变化,毕竟这些都是为了优化生产效率的变化。

分享到:
评论

相关推荐

    ObjCTrait:对Objective-C的特性支持

    定义为特征的对象是通过其他几个对象中可用方法的组合而创建的,从而可以从多个类重用代码,而无需多重继承。 在命名冲突的情况下,当组成的对象具有相同名称的多个方法时,程序员必须明确消除歧义中将使用这些方法...

    object开发的基本流程.doc

    Objective-C开发的基本流程主要包括以下几个关键步骤: 环境搭建:首先,你需要安装Xcode,这是Apple官方提供的集成开发环境(IDE),用于Objective-C的开发。Xcode包含了编写、编译和运行Objective-C代码所需的...

    iOS Runtime详解(新手也看得懂)

    我们从下面几个方面探寻Runtime的实现机制。 Runtime介绍 Runtime消息传递 Runtime消息转发 Runtime应用 Runtime介绍 Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个...

    iOS中Runtime的几种基本用法记录

    Objective-C拥有相当多的动态特性,这些特性在运行程序时候发挥作用. Objctive-C Runtime是个运行时的库,由C和汇编实现。通过Runtime封装的C结构体和函数可以在程序运行时创建、检查和修改类以及对象及其方法,甚至...

    亚信java笔试题-iOSResourceCollect:iOSResourceCollect/iOS资源收集

    几个常见的 HTTP状态码 ~ 序号 算法 地址 00001 算法笔记 00002 巩朋:我的算法学习之路 00003 傅里叶变换:MP3、JPEG和Siri背后的数学 序号 block 地址 0001 (唐巧)谈Objective-C Block的实现 0002 Block介绍(一)...

    ios问答题-这份文档总结了100个iOS开发/设计面试中可能会问到的问题,涵盖了非常全面的内容.md

    主要包括以下几个方面: 1. 常见问题 包括一些基本的开场问题,如对iOS开发的热衷程度、参与过的开源项目、开发流程、测试过程等。 2. iOS技术相关 针对iOS系统的一些核心技术和新特性,如Handoff、iCloud、iOS扩展、...

    WebSockets开发包starscream.zip

    同时还有个 Objective-C 版本的:jetfire 特性: 符合所有基础的 Autobahn 测试套件. 非阻塞。所有都在后台运行 简单的委托模式设计 TLS/WSS 支持 几百行简单的 LOC 代码 标签:starscream

    atom-1.22.1.zip

    好用的python编辑器,作为一个现代的代码编辑器,Atom 有着各种流行编辑器都有的特性,功能上非常丰富,支持各种编程语言的代码高亮(HTML / CSS / Javascript / PHP / Python / C / C++ / Objective C / Java / JSON...

    llvm编译器框架下clang编译器-易语言

    当然,上面都是扯淡,其实这个模块就是把clang的全部api、常量和数据类型声明出来了,还有写上了中文注释,但是这个东西并不常用,只能用于专业从事C/C++相关开发的才有用,比如上面提到的 静态分析,又或者我封装它...

    java开发家具系统源码-40-Best-Flutter-Templates:40个最佳Flutter模板

    高应用性能和开发速度是通过几个特性实现的: Flutter 使用Dart作为编程语言,将其编译为二进制代码,从而实现与 Objective-C、Swift、Java 或 Kotlin 相当的运算速度。 Flutter 不使用原生组件,因此您不必编写任何...

    Lua 面向对象

    1) 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。 2) 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码...

    深入剖析Swift性能优化

    经过几年的发展,Swift已经成为iOS开发语言的“中流砥柱”,Swift提供了非常灵活的高级别特性,例如协议、闭包、泛型等,并且Swift还进一步开发了强大的SIL(SwiftIntermediateLanguage)用于对编译器进行优化,使得...

    CodeMonkeyReader:码农周刊自制iOS客户端

    CodeMonkeyReader码农周刊自制客户端资源来源...折腾了几天,大致做出了一个简陋的能用的App,不过对架构和代码的控制的收获非常大。个人认为虽然写的不是非常优雅,也是一个不错的MVVM范例了~待完善的还有很多,干巴爹

Global site tag (gtag.js) - Google Analytics