[TOC]编程
毫无疑问,Objective-C (下称ObjC)在诞生三十年后,由于iOS系统在移动设备领域的制霸,迎来了近五年来一年一波的进化,这些新特性代表ObjC这个年事已高的语言,仍在一步一步追逐现代编程语言的步伐。安全
自动引用计数技术,简称ARC
,是Objective-C的一项重要进化。编译器在编译过程当中,自动分析代码,为对象添加release、retain、dealloc调用,大大减小开发中的内存管理代码,减小了工程师将近三分之一的工做负担,而且更加安全稳定。多线程
现在的Xcode工程,都自动开启了ARC模式,在这种模式下,工程师不能够手动调用release、retain、dealloc、autoreloease等函数,但工程师仍是能够灵活处理。闭包
例如:异步
@property (nonatomic, strong) NSArray* datas; ... //某处 self.datas = nil; //编译器会自动在这据句调用前执行 [self.datas release]; ...
在例如:async
@autoreleasepool { //括号里面分配内存的对象,都会加入大括号包裹的自动释放持,在大括号结束时释放。 }
固然,任何ObjC的方法,每一对大括号都是自带自动释放池的,不是特殊须要不用特别地使用@autoreleasepool
。编程语言
这个的翻译一直很难肯定,能够认为是一种简写。函数
不使用Literals特性时咱们这样写:atom
NSArray *myArray = [NSArray arrayWithObjects:object1,object2,object3,nil]; NSDictionary *myDictionary1 = [NSDictionary dictionaryWithObject:someObject forKey:@"key"]; NSDictionary *myDictionary2 = [NSDictionary dictionaryWithObjectsAndKeys:object1, key1, object2, key2, nil]; NSNumber *myNumber = [NSNumber numberWithInt:myInt]; NSNumber *mySumNumber= [NSNumber numberWithInt:(2 + 3)]; NSNumber *myBoolNumber = [NSNumber numberWithBool:YES];
使用Literals特性,就能够简写了:spa
NSArray *myArray = @[ object1, object2, object3 ]; NSDictionary *myDictionary1 = @{ @"key" : someObject }; NSDictionary *myDictionary2 = @{ key1: object1, key2: object2 }; NSNumber *myNumber = @(myInt); NSNumber *mySumNumber = @(2+3); NSNumber *myBoolNumber = @YES; NSNumber *myIntegerNumber = @8;
让基本数据对象,操做起来更便捷,就是一大进步。
一样举例比对,首先是不使用Subscripting特性
id object1 = [someArray objectAtIndex:0]; id object2 = [someDictionary objectForKey:@"key"]; [someMutableArray replaceObjectAtIndex:0 withObject:object3]; [someMutableDictionary setObject:object4 forKey:@"key"];
而后是用了Subscripting特性
id object1 = someArray[0]; id object2 = someDictionary[@"key"]; someMutableArray[0] = object3; someMutableDictionary[@"key"] = object4;
一目了然,更接近现代编程语言的风格。
iOS4
引入的block特性,看看下面的例子,关于闭包的详细咱们将单独写一篇文章进行讲解。
#include <stdio.h> #include <Block.h> typedef int (^IntBlock)(); IntBlock MakeCounter(int start, int increment) { __block int i = start; return Block_copy( ^ { int ret = i; i += increment; return ret; }); } int main(void) { IntBlock mycounter = MakeCounter(5, 2); printf("First call: %d\n", mycounter()); printf("Second call: %d\n", mycounter()); printf("Third call: %d\n", mycounter()); /* because it was copied, it must also be released */ Block_release(mycounter); return 0; } /* Output: First call: 5 Second call: 7 Third call: 9 */
简称GCD技术,是Apple开发的用于简化开发多核多线程
编程提供的一套底层C接口,详细内容将在单独的章节进行讲解。
//单线程阻塞
- (IBAction)analyzeDocument:(NSButton *)sender { NSDictionary *stats = [myDoc analyze]; [myModel setDict:stats]; [myStatsView setNeedsDisplay:YES]; }
//多线程异步等待,数据加载完毕后,主线程渲染。
- (IBAction)analyzeDocument:(NSButton *)sender { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary *stats = [myDoc analyze]; dispatch_async(dispatch_get_main_queue(), ^{ [myModel setDict:stats]; [myStatsView setNeedsDisplay:YES]; }); }); }