ios 系統更新特性

iOS6-10新特性總結


iOS 6

1、廢除了viewDidUnloadviewDidUnload

收到內存警告需要到didReceiveMemoryWarning中處理

【小技巧】:

iOS6以後的內存處理方式

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. -(void)didReceiveMemoryWarning  
  2.     {  
  3.             [super didReceiveMemoryWarning];//即使沒有顯示在window上,也不會自動的將self.view釋放。  
  4.             // Add code to clean up any of your own resources that are no longer necessary.  
  5.    
  6.             // 此處做兼容處理需要加上ios6.0的宏開關,保證是在6.0下使用的,6.0以前屏蔽以下代碼,否則會在下面使用self.view時自動加載viewDidLoad  
  7.              if ([self.view window] == nil)//是否是正在使用的視圖  
  8.              {  
  9.                    // Add code to preserve data stored in the views that might be  
  10.                    // needed later.  
  11.          
  12.                    // Add code to clean up other strong references to the view in  
  13.                    // the view hierarchy.  
  14.                    self.view = nil;//目的是再次進入時能夠重新加載調用viewDidLoad函數。  
  15.              }  
  16.     }  

2、廢除了shouldAutorotateToInterfaceOrientation

【小技巧】:

iOS6以後的內存處理方式,用下面兩個方法代替

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. - (BOOL)shouldAutorotate;    
  2. - (NSUInteger)supportedInterfaceOrientations;    

還需要在info.plist進行配置

3UISwitch可以設置開關顏色和背景圖

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @property (nonatomic,  retainUIColor *tintColor;  
  2. @property (nonatomic,  retainUIColor *thumbTintColor;   
  3. @property (nonatomic,  retainUIImage *onImage;   
  4. @property (nonatomic,  retainUIImage *offImage;  

4UINavigationBar新增了,設置陰影圖片屬性

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @property (nonatomicretainUIImage *shadowImage;  

5UIImage可以在設置圖片可以進行縮放

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. + (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale;   
  2. - (id)initWithData:(NSData *)data scale:(CGFloat)scale;  

6、新增UIRefreshControl

【小技巧】:與UITableView配合實現下拉刷新

7UICollectionView

【小技巧】:可以實現瀑布流

8Autolayout

9、語法相關

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. NSNumber* number = @(3);  
  2. NSArray* titles = @[@"a",@"b"];  
  3. NSDictionary* dict = @{@"a":@"b"};  


iOS 7

1、取消了udid和mac地址訪問

提供了UUIDIDFAIDFVOpenUDID

【小技巧】:

UUID

UUIDUniversally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分佈式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的UUID。在此情況下,就不需考慮數據庫建立時的名稱重複問題。蘋果公司建議使用UUID爲應用生成唯一標識字符串。

開發者可以在應用第一次啓動時調用一 次,然後將該串存儲起來,替代UDID來使用。但是,如果用戶刪除該應用再次安裝時,又會生成新的字符串,所以不能保證唯一識別該設備。使用UUID,就要考慮應用被刪除後再重新安裝時的處理。一個解決的辦法是:UUID一般只生成一次,保存在iOS系統裏面,如果應用刪除了,重裝應用之後它的UUID還是一樣的,除非系統重置 。但是不能保證在以後的系統升級後還能用(如果系統保存了該信息就能用)。

IDFA

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #import <AdSupport/AdSupport.h>  
  2.   NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];  

廣告標示符是iOS 6中另外一個新的方法,提供了一個方法advertisingIdentifier,通過調用該方法會返回一個NSUUID實例,最後可以獲得一個UUID,由系統存儲着的。不過即使這是由系統存儲的,但是有幾種情況下,會重新生成廣告標示符。如果用戶完全重置系統((設置程序 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果用戶明確的還原廣告(設置程序-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程序在後臺運行,此時用戶“還原廣告標示符”,然後再回到程序中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程序,然後再重新啓動程序,才能獲得還原後的廣告標示符。

在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤 裏重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認是允許追蹤的,而且一般用戶都不知道有這麼個設置,所以基本上用來監測推廣效果,是戳戳有餘了。

注意:由於idfa會出現取不到的情況,故絕不可以作爲業務分析的主id,來識別用戶

IDFV

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];  

Vendor標示符是給Vendor標識用戶用的,每個設備在所屬同一個Vender的應用裏,都有相同的值。其中的Vender是指應用提供商,但準確點說,是通過BundleIDDNS反轉的前兩部分進行匹配,如果相同就是同一個Vender,例如對於com.somecompany.appone,com.somecompany.apptwo

這兩個BundleID來說,就屬於同一個Vender,共享同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合於作爲內部用戶行爲分析的主id,來標識用戶,替代OpenUDID

注意:如果用戶將屬於此Vender的所有App卸載,則idfv的值會被重置,即再重裝此VenderAppidfv的值和之前不同。

OpenUDID:

[cpp] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. unsigned char result[16];   
  2. const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];  
  3.  CC_MD5( cStr, strlen(cStr), result );    
  4. _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];   

每臺iOS設備的OpenUDID是通過第一個帶有OpenUDID SDK包的App生成,如果你完全刪除全部帶有OpenUDID SDK包的App(比如恢復系統等),那麼OpenUDID會重新生成,而且和之前的值會不同,相當於新設備;

優點是沒有用到MAC地址;不同設備能夠獲取各自唯一的識別碼,保證了唯一性,可以用於以往UDID的相關用途;從代碼分析OpenUDID的獲取,識別碼獲取方便並且保存謹慎。缺點是當將設備上所有使用了OpenUDID方案的應用程序刪除,且設備關機重啓,xcode徹底清除並重啓,重裝應用程序去獲取OpenUDID,此時OpenUDID變化,與之前不一樣了,所有OpenUDID應用卸載後,由UIPasteboard保存的數據即被清除,重裝故會重新獲取新的OpenUDID

那麼當因爲用戶干預或者惡意程序,致使UIPasteboard數據清除,從而導致OpenUDID被刪除,重裝也會獲取新的OpenUDID

2UIPasteboard由共享變沙盒化

iOS7之前的UIPasteboard只要應用知道其名字,即可訪問其中的內容,而OpenUDID的實現方式也依賴於此,讓開發者能使用一組UUID來標記一個設備。iOS7之後,+[UIPasteboard pasteboardWithName:create:]和+[UIPasteboard pasteboardWithUniqueName]這兩個方法產生UIPasteboard僅供同組應用之間共享數據,也就是Info.plistCFBundleIdentifier字段的前兩段標識(例如com.yourcompany.xxcom.yourcompany)相同的應用才能相互共享數據。不同組應用之間相同名字的UIPasteboard是不同的,而不是以前的同一個。所以當前版本的OpenUDID隨着iOS7的出現也將慢慢失去其效用。

3、語法增加instancetype

instancetype用來在聲明一個方法時告訴編譯器其返回類型,它表示返回調用該方法的類的對象。這比之前返回id的通常做法要好,編譯器可以對返回類型做一些檢查,如果出現錯誤,在編譯時就能提醒你,而不是在程序運行時發生崩潰。同時,在調用子類方法時,使用它還可以省去對返回值的強制類型轉換,編譯器能夠正確推斷方法的返回值類型。

4、設置UIImage的渲染模式:UIImage.renderingMode

着色(Tint Color)是iOS7界面中的一個重大改變,你可以設置一個UIImage在渲染時是否使用當前視圖的Tint ColorUIImage新增了一個只讀屬性:renderingMode,對應的還有一個新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚舉值來設置圖片的renderingMode屬性。該枚舉中包含下列值:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIImageRenderingModeAutomatic // 根據圖片的使用環境和所處的繪圖上下文自動調整渲染模式。   
  2. UIImageRenderingModeAlwaysOriginal // 始終繪製圖片原始狀態,不使用Tint Color。   
  3. UIImageRenderingModeAlwaysTemplate // 始終根據Tint Color繪製圖片,忽略圖片的顏色信息。   

renderingMode屬性的默認值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取決於它顯示的位置。

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIImage *img = [UIImage imageNamed:@"myimage"];   
  2. img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];   

5tintcolor VS barTintColor

有些類,比如說UINaviagtionBarUISearchBarUITabBar以及UIToolbar已經有了這麼命名的屬性。他們現在有了一個新的屬性:barTintColor

【小技巧】:

爲了避免使用新屬性的時候犯錯誤,如果你的appp需要支持iOS6以前的系統的時候,請檢查一下。

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UINavigationBar *bar = self.navigationController.navigationBar;   
  2. UIColor *color = [UIColor greenColor];   
  3. if ([bar respondsToSelector:@selector(setBarTintColor:)]) { // iOS 7+   
  4.     bar.barTintColor = color;   
  5. else {  
  6.    bar.tintColor = color;   
  7. }   

6UIButtonTypeRoundRectUIButtonTypeSystem替代

7、新增檢查無線路由是否可用

iOS7當中,你可以通過AirPlay,藍牙或是其他的虛線機制瞭解是否有一個遠程的設備可用。瞭解它的話,就可以讓你的app在恰當的時候做恰當的事,比如說,在沒有遠程設備的時候就不顯示AirPlayicon

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @property (nonatomicreadonlyBOOL wirelessRoutesAvailable; //  是否有設備可以連接的無線線路?   
  2. @property (nonatomicreadonlyBOOL wirelessRouteActive; // 設備現在是否連接上了網絡   
  3. NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification;   
  4. NSString *const MPVolumeViewWirelessRouteActiveDidChangeNotification;    

8、更詳細蜂窩網絡信息

iOS7之前,是使用Reachability來檢測設備是否連接到WWAN或是Wifi的。iOS7在這個基礎上更進了一步,它會告訴你的設備連接上的是那種蜂窩網絡。

這是CTTelephonyNetworkInfo的部分功能,它是CoreTelephony框架的一部分。iOS7還增加了currentRadioAccessTechnology屬性和CTRadioAccessTechnologyDidChangeNotification到這個類。還有一些新的字符串常量來定義可能的值,比如說是CTRadioAccessTechnologyLTE

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @interface AppDelegate ()    
  2. @property (nonatomicstrongCTTelephonyNetworkInfo *networkInfo;   @end   
  3.     
  4. @implementation AppDelegate    
  5. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     
  6.   self.networkInfo = [[CTTelephonyNetworkInfo alloc] init];   
  7.  NSLog(@"Initial cell connection: %@"self.networkInfo.currentRadioAccessTechnology);   
  8.  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(radioAccessChanged) name:  
  9. CTRadioAccessTechnologyDidChangeNotification object:nil];   
  10. }     
  11. - (void)radioAccessChanged {   
  12.   NSLog(@"Now you're connected via %@"self.networkInfo.currentRadioAccessTechnology);   
  13. }   
  14. @end   

注意:研究一下CTTelephonyNetworkInfo.h文件來看看是否有其他無線網絡類型的的字符串常量。如果設備沒有連上的話currentRadioAccessTechnology則會返回nil


9、通過iCloud同步用戶設備的密碼

iOS7以及Mavericks增加了iCloud Keychain來提供密碼,以及iCloud中一些敏感數據的同步。開發者可以通過keychain中的kSecAttrSynchronizable key來遍歷dictionary對象。

由於直接處理keychain比較難,封裝庫提供了一個簡單的處理keychain的方法。SSKeychain封裝庫可能是最有名的的一個,作爲一種福利,現在它支持在iCloud同步。

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. - (BOOL)saveCredentials:(NSError **)error {   
  2.     SSKeychainQuery *query = [[SSKeychainQuery alloc] init];   
  3.     query.password = @"MySecretPassword";   
  4.     query.service = @"MyAwesomeService";   
  5.     query.account = @"John Doe";   
  6.     query.synchronizable = YES;   
  7.     return [query save:&error];   
  8. }   
  9.     
  10. - (NSString *)savedPassword:(NSError **)error {   
  11.     SSKeychainQuery *query = [[SSKeychainQuery alloc] init];   
  12.     query.service = @"MyAwesomeService";   
  13.     query.account = @"John Doe";   
  14.     query.synchronizable = YES;   
  15.     query.password = nil;   
  16.     if ([query fetch:&error]) {   
  17.         return query.password;   
  18.     }   
  19.     return nil;   
  20. }   

10、使用NSAttributedString顯示HTML

app中使用Webviews有時會讓人非常沮喪,即使只是顯示少量的HTMLneirong,Webviews也會消耗大量的內容。現在iOS7讓這些變得簡單了,你可以從用少量代碼在HTML文件中創建一個NSAttributedString

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. //htmlStr -> NSAttriubtedString  
  2. NSString *html = @"<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!";   
  3. NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};   
  4.     
  5. NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF8StringEncoding]   
  6. options:options documentAttributes:nil error:nil];   
  7.   
  8. //NSAttriubtedString -> htmlStr  
  9. NSAttributedString *attrString; // from previous code   
  10. NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};     
  11. NSData *htmlData = [attrString dataFromRange:NSMakeRange(0, [attrString length]) documentAttributes:options error:nil];   
  12. NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];   

11、系統提供base64編碼

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. NSData* sampleData = [@"Some sample data" dataUsingEncoding:NSUTF8StringEncoding];   
  2. NSString * base64String = [sampleData base64EncodedStringWithOptions:0];   
  3. NSData* dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:0];   

12、獲取截圖事件的通知(UIApplicationUserDidTakeScreenshotNotification


13、語音播報功能(AVSpeechSynthesizer

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];   
  2. AVSpeechUtterance *utterance =    
  3.   [AVSpeechUtterance speechUtteranceWithString:@"Wow, I have such a nice voice!"];    
  4. utterance.rate = AVSpeechUtteranceMaximumSpeechRate / 4.0f;   
  5. utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]; // defaults to your system language   
  6. [synthesizer speakUtterance:utterance];   

14UIScreenEdgePanGestureRecognizer

UIScreenEdgePanGestureRecognizer 繼承自UIPanGestureRecognizer ,它可以讓你從屏幕邊界即可檢測手勢。

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIScreenEdgePanGestureRecognizer *recognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:  
  2. @selector(handleScreenEdgeRecognizer:)];   
  3. recognizer.edges = UIRectEdgeLeft;   
  4. [self.view addGestureRecognizer:recognizer];   

15UIScrollViewKeyboardDismissMode

滾動的時候可以讓鍵盤消失是一種非常好的體驗,蘋果給UIScrollView添加了一個很好用的屬性keyboardDismissMode,現在僅僅只需要在Storyboard中改變一個簡單的屬性,或者增加一行代碼,你的app可以和辦到和Messages app一樣的事情了。

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIScrollViewKeyboardDismissModeNone     
  2. UIScrollViewKeyboardDismissModeOnDrag   
  3. UIScrollViewKeyboardDismissModeInteractive   

16、使用Core Image來檢測眨眼以及微笑

iOSCore Image增加了兩種人臉檢測功能:CIDetectorEyeBlink以及CIDetectorSmile。這也就是說你現在可以在照片中檢測微笑以及眨眼。

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIImage *image = [UIImage imageNamed:@"myImage"];   
  2. CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace   
  3.                                           context:nil   
  4.                                           options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}];   
  5. NSDictionary *options = @{ CIDetectorSmile@YES, CIDetectorEyeBlink@YES };   
  6. NSArray *features = [detector featuresInImage:image.CIImage options:options];   
  7. for (CIFaceFeature *feature in features) {   
  8.     NSLog(@"Bounds: %@", NSStringFromCGRect(feature.bounds));   
  9.     if (feature.hasSmile) {   
  10.     NSLog(@"Nice smile!");   
  11.    } else {   
  12.     NSLog(@"Why so serious?");   
  13.     }   
  14.     if (feature.leftEyeClosed || feature.rightEyeClosed) {   
  15.     NSLog(@"Open your eyes!");   
  16.     }   
  17. }   

17、給textView的文字上加點擊事件

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"This is an example by @marcelofabri_"];   
  2. [attributedString addAttribute:NSLinkAttributeName   
  3.                          value:@"username://marcelofabri_"   
  4.                          range:[[attributedString string] rangeOfString:@"@marcelofabri_"]];   
  5.  NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor],   
  6.                                  NSUnderlineColorAttributeName: [UIColor lightGrayColor],   
  7.                                  NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};     
  8. textView.linkTextAttributes = linkAttributes;   
  9. textView.attributedText = attributedString;   
  10. textView.delegate = self;   
  11.   
  12. //你也可以控制當鏈接被點擊的時候會發生什麼,實現這個可以使用UITextViewDelegate協議的新的shouldInteractWithURL方法,就像這樣:  
  13. - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {   
  14.     if ([[URL scheme] isEqualToString:@"username"]) {   
  15.         NSString *username = [URL host];    
  16.         // do something with this username   
  17.         // ...   
  18.         return NO;   
  19.     }   
  20.     return YES// let the system open this URL   
  21. }  

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開始處理音頻對於大多數開發者來說並不是一件很容易的事情。

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

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];  
  2. UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:nil];  
  3. [alertController addAction:cancelAction];  
  4. [alertController addAction:okAction];  
  5. [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,在某個空間周邊顯示一個氣泡菜單

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. MyViewController*   contentVC = [[MyViewController alloc]init];    
  2. contentVC.preferredContentSize = CGSizeMake(110160);    
  3. contentVC.modalPresentationStyle = UIModalPresentationPopover;    
  4.  self.popover = contentVC.popoverPresentationController;    
  5.  self.popover.delegate = self;    
  6. self.popover.backgroundColor = [UIColor greenColor];    
  7. self.popover.sourceView =button;    
  8. self.popover.sourceRect = button.bounds;     
  9. self.popover.permittedArrowDirections = UIPopoverArrowDirectionUp;    
  10. [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、定位權限的變化

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. // 當使用iOS8定位的時候需要請求用戶授權,且在info.plist裏添加字段NSLocationAlwaysUsageDescription請求用戶授權的描述  
  2. // iOS7僅僅需要在info.plist裏添加字段Privacy - Location Usage Description請求用戶授權的描述  
  3. if (IOS8) {  
  4. [self.maneger requestAlwaysAuthorization];//請求用戶授權  
  5. }  

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

一套圖形接口 OpenGL Direct3D類似主要製作3D相關

16Apple Pay

蘋果支付相關sdk

17tableviewcell自動適應高度

如果cellautolayout佈局,只需要兩行代碼就可以實現自動計算高度

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. self.tableView.estimatedRowHeight = 44.0f;  
  2. self.tableView.rowHeight = UITableViewAutomaticDimension;  

18WebKit

WKWebView可以替代UIWebView

19Swift語言

 

iOS 9

1https網絡

默認https,如果不支持https,需要到info.plist做配置

2、後臺定位

【小技巧】:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. _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

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. [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)泛型  如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. NSArray<NSString*>* datas;  

(2)可空標記  

:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. @property (nonatomicstrongNSArray *__nonull names;  
  2. @property (nonatomicstrong, 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語音識別

https://my.oschina.net/u/2340880/blog/751442

6Proactive Suggestions

siri建議

7CallKit

8、隱私權限

所有的功能都需要加隱私權限說明(彈窗),否則會閃退

9tabbar未選中顏色

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. tabBar.unselectedItemTintColor =[UIColor redColor];  

10、跟着系統字體變化

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. self.labels.font =[UIFont preferredFontForTextStyle:UIFontTextStyleBody];    
  2. self.labels.adjustsFontForContentSizeCategory = YES;  

11UIViewPropertyAnimator屬性動畫器

那麼在iOS 10之前,我們使用UIView做動畫效果或者自定義一些layer的動畫,如果開始了,一般無法進行停止操作更不能暫停操作,而且一些非常複雜的動畫處理也比較麻煩,但是在iOS10,蘋果退出了一個全新的API  UIViewPropertyAnimator,可供我們處理動畫操作UIViewPropertyAnimator  iOS 10 中新增的一個執行 View動畫的類,具有以下特點:

可中斷性

可擦除

可反轉性

豐富的動畫時間控制功能

12UIColor新方法

iOS 10 蘋果官方建議我們使用sRGB,因爲它性能更好,色彩更豐富。

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. + (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可以容易通過審覈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章