ios7新增基础类库以及OC新特性

原创 2013年10月10日 17:53:25

新特性:

Modules:用XCode5新建工程默认支持modules编译,老项目需在Build Settings里查找modules,找到的Enable Modules选项设置为YES。

对应新增语法:@import,导入系统头文件,例如:@import MapKit;  或者库的部分头文件:@import UIKit.UIView;

优点:不需要再在Build Phases里的Link Binary With Libraries添加系统framework文件;缺点:不支持自定义或第三方库


新返回类型:instancetype,用在构造函数返回类型上,建议以前用id作为返回类型的都改成instancetype。

好处:有更严格的编译类型检查,便于编译时即可发现潜在的问题;


NSArray:新增函数: - (id)firstObject; 但只要ios4以上都可以用

NSData:新增Base64编码,相应的函数有:

- (id)initWithBase64EncodedString:(NSString *)base64String 
      options:(NSDataBase64DecodingOptions)options;
 
- (NSString *)base64EncodedStringWithOptions:
      (NSDataBase64EncodingOptions)options;
 
- (id)initWithBase64EncodedData:(NSData *)base64Data 
      options:(NSDataBase64DecodingOptions)options;
 
- (NSData *)base64EncodedDataWithOptions:
      (NSDataBase64EncodingOptions)options;


NSTimer:新增函数:

- (NSTimeInterval)tolerance;
- (void)setTolerance:(NSTimeInterval)tolerance;

设置tolerance对于启动若干个fireDate相近的NSTimer有用,节省CPU唤醒时间


NSCharacterSet新增函数:

  • + (id)URLUserAllowedCharacterSet
  • + (id)URLPasswordAllowedCharacterSet
  • + (id)URLHostAllowedCharacterSet
  • + (id)URLPathAllowedCharacterSet
  • + (id)URLQueryAllowedCharacterSet
  • + (id)URLFragmentAllowedCharacterSet


新增类:

NSProgress:进度通知类


NSURLComponents:可把其视作NSMutableURL,例子:

NSURLComponents *components = [NSURLComponents componentsWithString:@"http://nshipster.com"];
components.path = @"/iOS7";
components.query = @"foo=bar";

NSLog(@"%@", components.scheme); // @"http"
NSLog(@"%@", [components URL]); // @"http://nshipster.com/iOS7?foo=bar"

CIDetectorSmile & CIDetectorEyeBlink:图像微笑和眨眼识别,例子:

CIDetector *smileDetector = [CIDetector detectorOfType:CIDetectorTypeFace
                                context:context 
                                options:@{CIDetectorTracking: @YES, 
                                          CIDetectorAccuracy: CIDetectorAccuracyLow}];
NSArray *features = [smileDetector featuresInImage:image options:@{CIDetectorSmile:@YES}];
if (([features count] > 0) && (((CIFaceFeature *)features[0]).hasSmile)) {
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(didFinishWritingImage), features);
} else {
    self.label.text = @"Say Cheese!"
}

AVCaptureMetaDataOutput:支持二维码及其他类型码识别,例子:

AVCaptureSession *session = [[AVCaptureSession alloc] init];
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device
                                                                    error:&error];
if (input) {
    [session addInput:input];
} else {
    NSLog(@"Error: %@", error);
}

AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[session addOutput:output];

[session startRunning];

#pragma mark - AVCaptureMetadataOutputObjectsDelegate

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects
       fromConnection:(AVCaptureConnection *)connection
{
    NSString *QRCode = nil;
    for (AVMetadataObject *metadata in metadataObjects) {
        if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) {
            // This will never happen; nobody has ever scanned a QR code... ever
            QRCode = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];
            break;
        }
    }

    NSLog(@"QR Code: %@", QRCode);
}

SSReadingList:添加URL到safari阅读列表中,例子:

NSURL *URL = [NSURL URLWithString:@"http://nshipster.com/ios7"];
[[SSReadingList defaultReadingList] addReadingListItemWithURL:URL
                                                        title:@"NSHipster"
                                                  previewText:@"..." 
                                                        error:nil];

AVSpeechSynthesizer:文本转语音,例子:

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"Just what do you think you're doing, Dave?"];
utterance.rate = AVSpeechUtteranceMinimumSpeechRate; // Tell it to me slowly
[synthesizer speakUtterance:utterance];

MKDistanceFormatter:距离格式化为本地文本,例子:

CLLocation *sanFrancisco = [[CLLocation alloc] initWithLatitude:37.775 longitude:-122.4183333];
CLLocation *portland = [[CLLocation alloc] initWithLatitude:45.5236111 longitude:-122.675];
CLLocationDistance distance = [portland distanceFromLocation:sanFrancisco];

MKDistanceFormatter *formatter = [[MKDistanceFormatter alloc] init];
formatter.units = MKDistanceFormatterUnitsImperial;
NSLog(@"%@", [formatter stringFromDistance:distance]); // 535 miles


参考网址:http://nshipster.com/ios7/

iOS字符串中特殊字符的编码与解码

1.网络请求时url中携带@等特殊字符的解决方案 a.对url进行特殊字符编码 - (nullable NSString *)stringByAddingPercentEncodingWit...
  • Olive1993
  • Olive1993
  • 2016年07月26日 16:06
  • 4084

iOS 7: 使用Base64编解码NSData和NSString对象

http://itony.me/488.html 随着iOS7正式版推出,Apple增加了使用Base64编解码的支持。在这篇文章中我们将通过两个例子,演示使用Base64编解码NSData和NS...
  • xyxjn
  • xyxjn
  • 2015年05月26日 15:43
  • 53660

原生Base64编码/解码(OC与Swift)

Objective-C     NSString *plainString = @"foo";     Encoding     NSData *plainData = [plainString...
  • pjk1129
  • pjk1129
  • 2015年11月25日 19:28
  • 8955

iOS7 AVFoundation 二维码扫瞄

iOS7,AVFoundation中现在已经内置支持一维和二维码的扫瞄,iOS6及之前的想要扫瞄二维码,还是需要添加第三方库ZXing和ZBar。 先添加AVFoundation.framework ...
  • cafei111
  • cafei111
  • 2013年10月24日 11:20
  • 9524

Swift学习笔记(3)iOS 9 中的网络请求

Swift学习笔记(3)iOS 9 中的网络请求目录Swift学习笔记3iOS 9 中的网络请求 目录 编码方法 请求方法 其他修改 完整代码 运行结果编码方法在iOS9中,以前常用的stringBy...
  • sps900608
  • sps900608
  • 2016年05月17日 18:51
  • 2677

iOS Base64 String 转成 NSString (base64编/解码)

编码(加密)NSData *encodeData = [decodeString dataUsingEncoding:NSUTF8StringEncoding]; NSString *base64St...
  • wxs0124
  • wxs0124
  • 2016年09月12日 14:37
  • 7594

iOS Base64编解码

Encoding NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding]; NSString *base64S...
  • zhugq_1988
  • zhugq_1988
  • 2015年06月26日 10:34
  • 6326

iOS7开发中的新特性,开发者需要注意了

iOS7到现在已经发布了有一段时间了。相信你现在已经了解了它那些开创性的视觉设计,已经了解了它的新的API,比如说SpirteKit,UIKit Dynamics以及TextKit,作为开发者,也很可...
  • liwei3gjob
  • liwei3gjob
  • 2014年04月19日 14:16
  • 4472

【iOS】iOS7 与以前版本比较,添加的新特性

全新UI设计 iOS7最大的变化莫过于UI设计,也许你会说UI设计“这是设计师大大们应该关注的事情,不关开发者的事,我们只需要替换图片就行了”。那你就错了。UI的变化必然带来使用习惯和方式的转变,如...
  • u014395105
  • u014395105
  • 2014年11月20日 11:43
  • 561

使用原生的Base64

使用原生的Base64 Base64是使用ASCII码显示二进制数据的一种流行方法。直到现在,开发者还不得不使用开源的工具来编码解码Base64的内容。   现在iOS7引入了以下四...
  • reylen
  • reylen
  • 2014年02月07日 10:32
  • 20769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios7新增基础类库以及OC新特性
举报原因:
原因补充:

(最多只允许输入30个字)