iOS开发人员:事实上你还有很是多东西需要学

iOS 新特性总结(since iOS6)

iOS 6

一、废除viewDidUnLoad

收到内存警告需要到didReceiveMemoryWarning中处理html

【小技巧】ios


 
   
-(void)didReceiveMemoryWarning
    {
            [super didReceiveMemoryWarning];//即便没有显示在window上。也不会本身主动的将self.view释放。

// Add code to clean up any of your own resources that are no longer necessary. // 此处作兼容处理需要加上ios6.0的宏开关,保证是在6.0下使用的,6.0曾经屏蔽如下代码,不然会在如下使用self.view时本身主动载入viewDidLoad if ([self.view window] == nil)//是不是正在使用的视图 { // Add code to preserve data stored in the views that might be // needed later. // Add code to clean up other strong references to the view in // the view hierarchy. self.view = nil;//目的是再次进入时可以又一次载入调用viewDidLoad函数。数据库

} }数组


二、废除shouldAutorotateToInterfaceOrientation

【小技巧】xcode

iOS 6之后的旋转处理方式,用如下两个方法替代

- (BOOL)shouldAutorotate;  
- (NSUInteger)supportedInterfaceOrientations; 

还需要在info.plist进行配置

三、UISwitch可以设置开关颜色和背景图

【小技巧】性能优化

@property (nonatomic,  retain) UIColor *tintColor;
@property (nonatomic,  retain) UIColor *thumbTintColor; 
@property (nonatomic,  retain) UIImage *onImage; 
@property (nonatomic,  retain) UIImage *offImage;
四、UINavigationBar新增了,设置阴影图片属性

【小技巧】服务器

@property (nonatomic, retain) UIImage *shadowImage;

五、UIImage可以在设置图片可以进行缩放网络

【小技巧】架构

+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale; 
- (id)initWithData:(NSData *)data scale:(CGFloat)scale;
六、新增UIRefreshControl

【小技巧】app

与UITableView配合实现下拉刷新

七、新增UICollectionView

【小技巧】

可以实现瀑布流

八、新增Autolayout布局方式

【小技巧】

学习第三方开源框架Masonry

九、语法相关

【小技巧】

新增字面量方法

NSNumber* iNumber = @3;
NSNumber* fNumber = @3.5;
NSArray* titles = @[@"a",@"b"];
NSDictionary* dict = @{@"a":@"b"};

【注意】:要确保字典和数组里面的内容不能为nil。不然会引起崩溃。


iOS 7

一、取消了udid和mac地址的訪问

提供了UUID。IDFA。IDFV,OpenUDID 

UUID: UUID是Universally Unique Identifier的缩写,中文意思是通用惟一识别码。

它是让分布式系统中的所有元素。都能有惟一的辨识资讯,而不 需要透过中央控制端来作辨识资讯的指定。这样。每个人都可以创建不与其它人冲突的 UUID。在此状况下。就不需考虑数据库创建时的名称反复问 题。苹果公司建议使用UUID为应用生成惟一标识字符串。 开发人员可以在应用第一次启动时调用一次,而后将该串存储起来,替代UDID来使用。

但是,假设用户删除该应用再次安装时,又会生成新的字符串,所 以不能保证惟一识别该设备。使用UUID,就要考虑应用被删除后再又一次安装时的处理。

一个解决的办法是:UUID通常仅仅生成一次,保存在iOS系统里 面,假设应用删除了,重装应用以后它的UUID仍是同样的。除非系统重置。但是不能保证在之后的系统升级后还能用(假设系统保存了该信息就能 用)。

IDFA: 广告标示符是iOS 6中另一个新的方法。提供了一个方法advertisingIdentifier。经过调用该方法会返回一个NSUUID实例,最 后可以得到一个UUID。由系统存储着的。只是即便这是由系统存储的。但是有几种状况下,会又一次生成广告标示符。假设用户全然重置系统((设置程 序 -> 通用 -> 还原 -> 还原位置与隐私),这个广告标示符会又一次生成。

另外假设用户明白的还原广告(设置程序->通用 -> 关于本机 ->广告 ->还原广告标示符),那么广告标示符也会又一次生成。关于广告标示符的还原。有一点需要注意:假设程序在后台执行,此时用户“还原广告标示符”, 而后再回到程序中,此时获取广告标示符并不会立刻得到还原后的标示符。必需要终止程序。而后再又一次启动程序,才干得到还原后的广告标示符。

在同一个设备上的所有App都会取到一样的值。是苹果专门给各广告提供商用来追踪用户而设的。用户可以在 设置|隐私|广告追踪 里重置此id的 值,或限制此id的使用,故此id有可能会取不到值。但好在Apple默认是赞成追踪的,而且通常用户都不知道有这么个设置,因此基本上用来监測推广 效果,是戳戳有余了。 【注意】:因为idfa会出现取不到的状况,故毫不可以做为业务分析的主 id,来识别用户

#import <AdSupport/AdSupport.h>
  NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

IDFV: Vendor标示符是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有一样的值。当中的Vender是指应用提供商,但准确点说, 是经过BundleID的DNS反转的前两部分进行匹配,假设一样就是同一个Vender,好比对于 com.somecompany.appone,com.somecompany.apptwo这两个BundleID来讲,就属于同一个Vender,共享同一个idfv的值。和 idfa不一样的是。idfv的值是必定能取到的,因此很是适合于做为内部用户行为分析的主id,来标识用户。替代OpenUDID。 【注意】:假设用户将属于此Vender的所有App卸载。则idfv的值会被重置,即再重装此Vender的App,idfv的值和以前不一样。

NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

OpenUDID:
每台iOS设备的OpenUDID是经过第一个带有OpenUDID SDK包的App生成,假设你全然删除所有带有OpenUDID SDK包的App(比方恢复系统
等)。那么OpenUDID会又一次生成,而且和以前的值会不一样,至关于新设备;

长处是没实用到MAC地址;不一样设备可以获取各自惟一的识别码,保证了惟一性,可以用于以往UDID的相关用途;从代码分析OpenUDID的获取。识别
码获取方便而且保存慎重。缺点是当将设备上所有使用了OpenUDID方案的应用程序删除,且设备关机从新启动,xcode完全清除并从新启动,重装应用程序去
获取OpenUDID。此时OpenUDID变化,与以前不同了,所有OpenUDID应用卸载后。由UIPasteboard保存的数据即被清除,重装故会又一次获取新的
OpenUDID。那么当因为用户干预或者恶意程序,导致UIPasteboard数据清除。从而致使OpenUDID被删除。重装也会获取新的OpenUDID。
unsigned char result[16]; 
const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
 CC_MD5( cStr, strlen(cStr), result );  
_openUDID = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15],  arc4random() % 4294967295]; 


二、UIPasteboard由共享变沙盒化

iOS7以前的UIPasteboard仅仅要应用知道其名字。就能够訪问当中的内容。而OpenUDID的实现方式也依赖于此,让开发人员能使用一组UUID来标记一个设备。iOS7以后,+[UIPasteboard pasteboardWithName:create:]+[UIPasteboard pasteboardWithUniqueName]这两个方法产生UIPasteboard仅供同组应用之间共享数据。也就是Info.plistCFBundleIdentifier字段的前两段标识(好比com.yourcompany.xxcom.yourcompany)一样的应用才干相互共享数据。不一样组应用之间一样名字的UIPasteboard是不一样的,而不是曾经的同一个。因此当前版本号的OpenUDID随着iOS7的出现也将慢慢失去其效用。

三、语法添加instancetype

instancetype用来在声明一个方法时告诉编译器其返回类型,它表示返回调用该方法的类的对象。这比以前返回id的一般作法要好,编译器可以对返回类型作一些检查。假设出现错误。在编译时就能提醒你,而不是在程序执行时发生崩溃。同一时候。在调用子类方法时。使用它还可以省去对返回值的强制类型转换。编译器可以正确判断方法的返回值类型。

四、设置UIImage的渲染模式:UIImage.renderingMode

着色(Tint Color)是iOS7界面中的一个重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color。UIImage新增了一个仅仅读属性:renderingMode,相应的另外一个新增方法:imageWithRenderingMode:。它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包括下列值:

UIImageRenderingModeAutomatic // 依据图片的使用环境和所处的画图上下文本身主动调整渲染模式。 
UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。 
UIImageRenderingModeAlwaysTemplate // 始终依据Tint Color绘制图片,忽略图片的颜色信息。 

renderingMode属性的默认值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取决于它显示的位置。

【小技巧】

UIImage *img = [UIImage imageNamed:@"myimage"]; 
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

五、tinColor vs barTinColor

有些类,比方说UINaviagtionBar,UISearchBar,UITabBar以及UIToolbar已经有了这么命名的属性。他们现在有了一个新的属性:barTintColor

【小技巧】
为了不使用新属性的时候犯错误,假设你的appp需要支持iOS6曾经的系统的时候,请检查一下。

UINavigationBar *bar = self.navigationController.navigationBar; 
UIColor *color = [UIColor greenColor]; 
if ([bar respondsToSelector:@selector(setBarTintColor:)]) { // iOS 7+ 
    bar.barTintColor = color; 
} else {
   bar.tintColor = color; 
} 

六、UIButtonTypeRoundRect被UIButtonTypeSystem替代

七、新增检查无线路由是否可用

在iOS7当中,你可以经过AirPlay,蓝牙或是其它的虚线机制了解是否有一个远程的设备可用。了解它的话。就可以让你的app在恰当的时候作恰当的事,比方说。在没有远程设备的时候就不显示AirPlay的icon。

【小技巧】

@property (nonatomic, readonly) BOOL wirelessRoutesAvailable; //  是否有设备可以链接的无线线路? 
@property (nonatomic, readonly) BOOL wirelessRouteActive; // 设备现在是否链接上了网络 
NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification; 
NSString *const MPVolumeViewWirelessRouteActiveDidChangeNotification;  

八、更具体蜂窝网络信息

在iOS7以前,是使用Reachability来检測设备是否链接到WWAN或是Wifi的。iOS7在这个基础上更进了一步,它会告诉你的设备链接上的是那种蜂窝网络。 这是CTTelephonyNetworkInfo的部分功能。它是CoreTelephony框架的一部分。iOS7还添加了currentRadioAccessTechnology属性和CTRadioAccessTechnologyDidChangeNotification到这个类。另外一些新的字符串常量来定义可能的值。比方说是CTRadioAccessTechnologyLTE。

【小技巧】

@interface AppDelegate ()  
@property (nonatomic, strong) CTTelephonyNetworkInfo *networkInfo;   @end 
  
@implementation AppDelegate  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
  self.networkInfo = [[CTTelephonyNetworkInfo alloc] init]; 
 NSLog(@"Initial cell connection: %@", self.networkInfo.currentRadioAccessTechnology); 
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(radioAccessChanged) name:
CTRadioAccessTechnologyDidChangeNotification object:nil]; 
}   
- (void)radioAccessChanged { 
  NSLog(@"Now you're connected via %@", self.networkInfo.currentRadioAccessTechnology); 
} 
@end 

九、经过iCloud同步用户设备的密码

iOS7以及Mavericks添加了iCloud Keychain来提供密码,以及iCloud中一些敏感数据的同步。开发人员可以经过keychain中的kSecAttrSynchronizable key来遍历dictionary对象。 因为直接处理keychain比較难,封装库提供了一个简单的处理keychain的方法。SSKeychain封装库多是最有名的的一个,做为一种福利。现在它支持在iCloud同步。

【小技巧】

- (BOOL)saveCredentials:(NSError **)error { 
    SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 
    query.password = @"MySecretPassword"; 
    query.service = @"MyAwesomeService"; 
    query.account = @"John Doe"; 
    query.synchronizable = YES; 
    return [query save:&error]; 
} 
  
- (NSString *)savedPassword:(NSError **)error { 
    SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 
    query.service = @"MyAwesomeService"; 
    query.account = @"John Doe"; 
    query.synchronizable = YES; 
    query.password = nil; 
    if ([query fetch:&error]) { 
        return query.password; 
    } 
    return nil; 
} 

十、使用NSAttributedString显示HTML

在app中使用Webviews有时会让人很是沮丧,即便仅仅是显示少许的HTMLneirong,Webviews也会消耗大量的内容。现在iOS7让这些变得简单了。你可以从用少许代码在HTML文件里建立一个NSAttributedString。

【小技巧】

//htmlStr -> NSAttriubtedString
NSString *html = @"<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!"; 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}; 
  
NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF8StringEncoding] 
options:options documentAttributes:nil error:nil]; 

//NSAttriubtedString -> htmlStr
NSAttributedString *attrString; // from previous code 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};   
NSData *htmlData = [attrString dataFromRange:NSMakeRange(0, [attrString length]) documentAttributes:options error:nil]; 
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding]; 

11、系统提供base64编码

NSData* sampleData = [@"Some sample data" dataUsingEncoding:NSUTF8StringEncoding]; 
NSString * base64String = [sampleData base64EncodedStringWithOptions:0]; 
NSData* dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:0]; 

12、获取截图事件的通知(UIApplicationUserDidTakeScreenshotNotification


13、语音播报功能(AVSpeechSynthesizer

【小技巧】:

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init]; 
AVSpeechUtterance *utterance =  
  [AVSpeechUtterance speechUtteranceWithString:@"Wow, I have such a nice voice!"];  
utterance.rate = AVSpeechUtteranceMaximumSpeechRate / 4.0f; 
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]; // defaults to your system language 
[synthesizer speakUtterance:utterance]; 

14UIScreenEdgePanGestureRecognizer

UIScreenEdgePanGestureRecognizer 继承自UIPanGestureRecognizer ,它可以让你从屏幕边界就能够检測手势。

【小技巧】:

UIScreenEdgePanGestureRecognizer *recognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:
@selector(handleScreenEdgeRecognizer:)]; 
recognizer.edges = UIRectEdgeLeft; 
[self.view addGestureRecognizer:recognizer]; 

15UIScrollViewKeyboardDismissMode

滚动的时候可以让键盘消失是一种很是好的体验。苹果给UIScrollView加入了一个很是好用的属性keyboardDismissMode。现在仅仅仅仅需要在Storyboard中改变一个简单的属性。或者添加一行代码,你的app可以和办到和Messages app同样的事情了。

UIScrollViewKeyboardDismissModeNone   
UIScrollViewKeyboardDismissModeOnDrag 
UIScrollViewKeyboardDismissModeInteractive 

16、使用Core Image来检測眨眼以及微笑

iOSCore Image添加了两种人脸检測功能:CIDetectorEyeBlink以及CIDetectorSmile。这也就是说你现在可以在照片中检測微笑以及眨眼。

【小技巧】:

UIImage *image = [UIImage imageNamed:@"myImage"]; 
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace 
                                          context:nil 
                                          options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}]; 
NSDictionary *options = @{ CIDetectorSmile: @YES, CIDetectorEyeBlink: @YES }; 
NSArray *features = [detector featuresInImage:image.CIImage options:options]; 
for (CIFaceFeature *feature in features) { 
    NSLog(@"Bounds: %@", NSStringFromCGRect(feature.bounds)); 
    if (feature.hasSmile) { 
    NSLog(@"Nice smile!"); 
   } else { 
    NSLog(@"Why so serious?"); 
    } 
    if (feature.leftEyeClosed || feature.rightEyeClosed) { 
    NSLog(@"Open your eyes!"); 
    } 
} 

17、给textView的文字上加点击事件

【小技巧】:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"This is an example by @marcelofabri_"]; 
[attributedString addAttribute:NSLinkAttributeName 
                         value:@"username://marcelofabri_" 
                         range:[[attributedString string] rangeOfString:@"@marcelofabri_"]]; 
 NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor], 
                                 NSUnderlineColorAttributeName: [UIColor lightGrayColor], 
                                 NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};   
textView.linkTextAttributes = linkAttributes; 
textView.attributedText = attributedString; 
textView.delegate = self; 

//你也可以控制当连接被点击的时候会发生什么,实现这个可以使用UITextViewDelegate协议的新的shouldInteractWithURL方法,就像这样:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { 
    if ([[URL scheme] isEqualToString:@"username"]) { 
        NSString *username = [URL host];  
        // do something with this username 
        // ... 
        return NO; 
    } 
    return YES; // let the system open this URL 
}

18UI变化

取消了拟物化,变成了扁平化设计

UITabbarUIbarButtonItemnavigationBar。都以特殊形式渲染,图片没有内部颜色,经过tinColor渲染图片(开发人员可以经过渲染模式使用原图颜色)。navigationBar及导航栏也做为self.view的内容。因此self.view的原点从导航栏如下变成了。状态栏的顶端。

(可以经过self.navigationController.navigationBar.translucent以及self.edgesForExtendedLayout来决定是否以ios7ios6样式显示)

19sprite kit

可以用系统自带框架作小游戏

20、多任务

http://blog.csdn.net/tskyfree/article/details/45696597

http://blog.csdn.net/wwwang89123/article/details/46944665

21AirDrop

苹果将该功能集成到了UIActivityViewController。假设作了分享功能,则并不要加入特别的代码,具体实现參考UIActivityViewController

22MapKit

1MKMapCamera。可以将一个MKMapCamera对象加入到地图上。在指明位置,角度和方向后将呈现3D的样子大概可以想象成一个数字版的Google街景..

2)MKDirections获取Apple提供的基于方向的路径,而后可以用来将路径绘制在本身的应用中。这可能对一些小的地图服务提供商产生冲击,但是仍是那句话。地图是一个数据的世界,在拥有完备数据以前。Apple不是Google的对手。这个情况至少会持续好几年(也有多是永远)。

3MKGeodesicPolyline建立一个随地球曲率的线,并附加到地图上。完毕一些视觉效果。

4)MKMapSnapshotter使用其拍摄基于地图的照片,或许各种签到类应用会用到。

5.改变了overlay物件的渲染方式。

23、动态uikit

新增了UIDynamicItem托付。用来为UIView制定动态行为。固然其它不论什么对象都能经过实现这组接口来定义动态行为,仅仅只是在UIKit中可能应用最多。

所谓动态行为。是指将现实世界的行为或者特性引入到UI中。比方重力等。

经过实现UIDynamicItemUIKit现在支持例如如下行为: * UIAttachmentBehavior 链接两个实现了UIDynamicItem的物体(如下简称动态物体),一个物体移动时。另外一个尾随移动 * UICollisionBehavior指定边界。使两个动态物体可以进行碰撞 * UIGravityBehavior顾名思义,为动态物体添加剧力模拟 * UIPushBehavior为动态物体施加持续的力 * UISnapBehavior为动态物体指定一个附着点,想象一下类似挂一幅画在图钉上的感受。

假设有开发游戏的童鞋可能会认为这些很是多都是作游戏时候的需求,一种box2d之类的2D物理引擎的既视感跃然而出。没错的亲。动态UI,加上以后要介绍的Sprite Kit,极大的扩展了使用UIKit进行游戏开发的可能性。

另外要注意UIDynamicItem不只适用于UIKit。不论什么对象都可以实现接口来得到动态物体的一些特性,因此说用来作一些3D的事情也不是没有可能。假设认为Cocos2D+box2d这种组合使用起来不方便的话,现在动态UIKit+SpriteKit给出了新的选择。

24Inter-App Audio应用间的音频

AudioUnit框架中加入了在同一台设备不一样应用之间发送MIDI指令和传送音频的能力。

比方在一个应用中使用AudioUnit录音,而后在另外一个应用中打开以处理等。在音源应用中声明一个AURemoteIO实例来标为Inter-App可用,在目标应用中使用新的发现接口来发现并获取音频。想法很是好,也算是在应用内共享迈出了一步,只是我对现在使用AudioUnit这种低层级框架的应用数量表示不乐观。

或许从此会有一些为更高层级设计的共享API提供给开发人员使用。毕竟要从AudioUnit開始处理音频对于大多数开发人员来讲并不是一件很是easy的事情。

25、点对点链接 Peer-to-Peer Connectivity

可以当作是AirDrop不能直接使用的补偿,代价是需要本身实现。MultipeerConnectivity框架可以用来发现和链接附近的设备,并数据传输。而这一切并不需要有网络链接。可以看到Apple逐渐在文件共享方面一步步放开限制,但是固然所有这些都仍是被限制在sandbox里的。

26Store Kit Framework

Store Kit在内购方面採用了新的订单系统,这将可以实现对订单的本机验证。这是一次相应内购破解和有可能验证失败致使内购失败的更新,苹果但愿藉此下降内购的实现流程,下降出错,同一时候遏制内购破解泛滥。

前者可能没有问题,但是后者的话。因为objc的动态特性,决定了仅仅要有越狱存在,内购破解也是迟早的事情。只是这一点确实方便了没有能力架设验证服务器的小开发人员,这方面来讲仍是很是好的。

27iBeacon

一种全新的基于蓝牙的传输协议,可以实现很是精确的定位

http://blog.csdn.net/boxertan/article/details/39783963



iOS 8

1UIAlertController

UIAlertController整合了actionsheetalertview

【小技巧】:

UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];

2SizeClasses

可以依据不一样尺寸,横屏竖屏在StoryBoard上或者Xib上对app进行适配

3Health Kit

健康方面 

4Home Kit

智能家居方面

5SceneKit

游戏方面

6Handoff

假设你的程序有mac版本号,那么它可以和ios版本号进行自由的交互

好比系统的电话,短信,facetime功能)

7CLFloor室内定位

CLLocationfloor可以告诉你当前的楼层

8TouchID

指纹识别方面

9PhotoKit

一个新的相冊框架。替代了原来的AL

10UIPopoverPresentationController

其至关于ipad中的UIPopoverController,在某个空间周边显示一个气泡菜单

【小技巧】:

 MyViewController*   contentVC = [[MyViewController alloc]init];  
 contentVC.preferredContentSize = CGSizeMake(110, 160);  
 contentVC.modalPresentationStyle = UIModalPresentationPopover;  
  self.popover = contentVC.popoverPresentationController;  
  self.popover.delegate = self;  
 self.popover.backgroundColor = [UIColor greenColor];  
 self.popover.sourceView =button;  
 self.popover.sourceRect = button.bounds;   
 self.popover.permittedArrowDirections = UIPopoverArrowDirectionUp;  
 [self presentViewController:contentVC animated:YES completion:nil];//推出popover 

11Cloud Kit

其类似于BaaS。与之不一样的是,Cloud Kit倾向于对数据的集成。你可以不更改应用现有的数据模型和结构,而仅仅是使用 Cloud Kit 来从云端获取数据或者向云端存储数据。但是其最大限制在于仅仅能用于苹果端。

12、全新的通知机制

http://blog.csdn.net/songhongri/article/details/39482067

13、定位权限的变化

【小技巧】:

// 当使用iOS8定位的时候需要请求用户受权,且在info.plist里加入字段NSLocationAlwaysUsageDescription请求用户受权的描写叙述
// iOS7仅仅需要在info.plist里加入字段Privacy - Location Usage Description请求用户受权的描写叙述
if (IOS8) {
[self.maneger requestAlwaysAuthorization];//请求用户受权
}

14、各类小插件

Today Widget Extension

http://blog.csdn.net/kuloveyouwei/article/details/44019815

第三方输入法 Extension

Document Picker Extension

Photo Editing Extension

Shared Extension

Action Extension

Watch Extension

15Metal Kit

一套图形接口OpenGLDirect3D类似主要制做3D相关

16Apple Pay

苹果支付相关sdk

17tableviewcell本身主动适应高度

假设cellautolayout布局,仅仅需要两行代码就可以实现本身主动计算高度

self.tableView.estimatedRowHeight = 44.0f;
self.tableView.rowHeight = UITableViewAutomaticDimension;

18WebKit

WKWebView可以替代UIWebView

19Swift语言

 

iOS 9

1https网络

默认https,假设不支持https,需要到info.plist作配置

2、后台定位

【小技巧】:

_locationManager.allowsBackgroundLocationUpdates = YES;

3Bitcode

4inHouse需要进入系统设置权限(弹窗赞成)才干安装

5URL scheme

iOS9中,假设使用URL scheme必须在"info.plist"中将你要在外部调用的URL scheme列为白名单。不然没法跳回来。

info.plist中设置 LSApplicationQueriesSchemes类型为数组。如下加入所有你用到的scheme

6、苹方字体

7iPad适配Slide Over Split View

可以进行多窗体开发

8tableview局部reload

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];

9Watch Connectivity

因为watchOS 2的架构变化。需要这么一个东西来对iPhoneWatch进行双向通讯

10Spotlight 

可以让本身的app在系统搜索栏搜到内容

11App Thinning

可以针对设备对app优化,让安装包变小

12Safari Services FrameworkSFSafariViewController

但你的app需要展现一个WebView又不需要太多定制的时候,用它来替换掉你现在在用的UIWebView或者WKWebView。他可以让Safari以一个Controller的形式载入你的网页,和系统的Safari全然共享CookieAutofill等特性,最重要的,SafariJavaScript引擎

133D touch

http://www.jianshu.com/p/b552bedbc3ef

14UI Test

可以用Xcode进行项目的本身主动化測试了

15GameplayKitReplayKitModel I/O

对游戏的支持

16、语法相关

(1)泛型  如:

NSArray<NSString*>* datas;

(2)可空标记  

:

@property (nonatomic, strong) NSArray *__nonull names;
@property (nonatomic, strong, nonnull) NSarray *names;

(3)kindof

可以让返回值用kindof

17UIStackView

类似于安卓的线性布局

18preferredStatusBarStyle

控制器管理状态栏


iOS 10

1User Notifications

https://onevcat.com/2016/08/notification/

2iMessage Apps 表情包App

3、新的插件

iMessage Extension

Notification Content Extension

Notification Service Extension

Audio Unit Extension

Broadcast UI Extension

Broadcast Upload Extension

Call Directory Extension

Content Blocker Extension

Intents Extension

Intents UI Extension

Shared Links Extension

Sticker Pack Extension

4SiriKit(使用siri服务)

iOS 10中,咱们仅仅能用 SiriKit来作六类事情。各自是:

  • 语音和视频通话
  • 发送消息
  • 发送或接收付款
  • 搜索照片
  • 约车
  • 管理健身

5SpeechFramework语音识别

http://www.javashuo.com/article/p-nlkucemx-gw.html

6Proactive Suggestions

siri建议

7CallKit

8、隐私权限

所有的功能都需要加隐私权限说明(弹窗),不然会闪退

9tabbar未选中颜色

tabBar.unselectedItemTintColor =[UIColor redColor];

10、跟着系统字体变化

self.labels.font =[UIFont preferredFontForTextStyle:UIFontTextStyleBody];  
self.labels.adjustsFontForContentSizeCategory = YES;

11UIViewPropertyAnimator属性动画器

那么在iOS 10以前,咱们使用UIView作动画效果或者本身定义一些layer的动画,假设開始了,通常没法进行中止操做更不能暂停操做,而且一些很是复杂的动画处理也比較麻烦。但是在iOS10。苹果退出了一个全新的API  UIViewPropertyAnimator,可供咱们处理动画操做UIViewPropertyAnimator iOS 10中新增的一个执行 View动画的类,具备如下特色:

可中断性

可擦除

可反转性

丰富的动画时间控制功能

12UIColor新方法

iOS 10苹果官方建议咱们使用sRGB,因为它性能更好,色彩更丰富。

+ (UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha   NS_AVAILABLE_IOS  (10_0);

13ipv6适配

14UITextContentType

iOS 10 UITextField加入了textContentType枚举,指示文本输入区域所指望的语义意义。

使用此属性可以给键盘和系统信息,关于用户输入的内容的预期的语义意义。好比,您可以指定一个文本字段。用户填写收到一封电子邮件确认uitextcontenttypeemailaddress。当您提供有关您指望用户在文本输入区域中输入的内容的信息时,系统可以在某些状况下本身主动选择适当的键盘,并提升键盘修正和主动与其它文本输入机会的整合。

15UIScrollView新增refreshControl

16、判断系统版本号

//值为 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]

//值为10.000000[[UIDevice currentDevice] systemVersion].floatValue,

//值为10.0 [[UIDevice currentDevice] systemVersion]

17Xcode8不能用插件

http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm_source=tuicool&utm_medium=referral

18、[[UIApplication sharedApplication] openURL被废弃

【小技巧】:

 [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:nil]取代。

19、字体变化

ios10字体变大,有可能字体显示不全,因此lable大小不要写死

20UICollectionView性能优化

iOS 10 UICollectionView进一步的优化。

  • UICollectionView cell pre-fetching预载入机制
  • UICollectionView and UITableView prefetchDataSource新增的API
  • 针对self-sizing cells的改进
  • Interactive reordering

21https适配

iOS 9中默认非HTTS的网络是被禁止的,固然咱们也可以把NSAllowsArbitraryLoads设置为YES禁用ATS。只是iOS 10201711日起苹果不一样意咱们经过这种方法跳过ATS,也就是说强制咱们用HTTPS。假设不这种话提交App可能会被拒绝。但是咱们可以经过NSExceptionDomains来针对特定的域名开放HTTP可以easy经过审核。

相关文章
相关标签/搜索