收到內存警告需要到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函數。數據庫
} }數組
【小技巧】xcode
iOS 6之後的旋轉處理方式,用如下兩個方法替代 - (BOOL)shouldAutorotate; - (NSUInteger)supportedInterfaceOrientations; 還需要在info.plist進行配置
【小技巧】性能優化
@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配合實現下拉刷新
【小技巧】
可以實現瀑布流
【小技巧】
學習第三方開源框架Masonry
【小技巧】
新增字面量方法 NSNumber* iNumber = @3; NSNumber* fNumber = @3.5; NSArray* titles = @[@"a",@"b"]; NSDictionary* dict = @{@"a":@"b"}; 【注意】:要確保字典和數組裏面的內容不能爲nil。不然會引起崩潰。
提供了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];
iOS7以前的UIPasteboard
僅僅要應用知道其名字。就能夠訪問當中的內容。而OpenUDID的實現方式也依賴於此,讓開發人員能使用一組UUID來標記一個設備。iOS7以後,+[UIPasteboard pasteboardWithName:create:]
和+[UIPasteboard pasteboardWithUniqueName]
這兩個方法產生UIPasteboard
僅供同組應用之間共享數據。也就是Info.plist
中CFBundleIdentifier
字段的前兩段標識(好比com.yourcompany.xx
的com.yourcompany
)一樣的應用才幹相互共享數據。不一樣組應用之間一樣名字的UIPasteboard是不一樣的,而不是曾經的同一個。因此當前版本號的OpenUDID隨着iOS7的出現也將慢慢失去其效用。
instancetype用來在聲明一個方法時告訴編譯器其返回類型,它表示返回調用該方法的類的對象。這比以前返回id的一般作法要好,編譯器可以對返回類型作一些檢查。假設出現錯誤。在編譯時就能提醒你,而不是在程序執行時發生崩潰。同一時候。在調用子類方法時。使用它還可以省去對返回值的強制類型轉換。編譯器可以正確判斷方法的返回值類型。
着色(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];
有些類,比方說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; }
在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
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; }
在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];
NSData* sampleData = [@"Some sample data" dataUsingEncoding:NSUTF8StringEncoding]; NSString * base64String = [sampleData base64EncodedStringWithOptions:0]; NSData* dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
【小技巧】:
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];
UIScreenEdgePanGestureRecognizer 繼承自UIPanGestureRecognizer ,它可以讓你從屏幕邊界就能夠檢測手勢。
【小技巧】:
UIScreenEdgePanGestureRecognizer *recognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action: @selector(handleScreenEdgeRecognizer:)]; recognizer.edges = UIRectEdgeLeft; [self.view addGestureRecognizer:recognizer];
滾動的時候可以讓鍵盤消失是一種很是好的體驗。蘋果給UIScrollView加入了一個很是好用的屬性keyboardDismissMode。現在僅僅僅僅需要在Storyboard中改變一個簡單的屬性。或者添加一行代碼,你的app可以和辦到和Messages app同樣的事情了。
UIScrollViewKeyboardDismissModeNone UIScrollViewKeyboardDismissModeOnDrag UIScrollViewKeyboardDismissModeInteractive
iOS給Core 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!"); } }
【小技巧】:
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 }
取消了擬物化,變成了扁平化設計
UITabbar,UIbarButtonItem,navigationBar。都以特殊形式渲染,圖片沒有內部顏色,經過tinColor渲染圖片(開發人員可以經過渲染模式使用原圖顏色)。navigationBar及導航欄也做爲self.view的內容。因此self.view的原點從導航欄如下變成了。狀態欄的頂端。
(可以經過self.navigationController.navigationBar.translucent以及self.edgesForExtendedLayout來決定是否以ios7或ios6樣式顯示)
可以用系統自帶框架作小遊戲
http://blog.csdn.net/tskyfree/article/details/45696597
http://blog.csdn.net/wwwang89123/article/details/46944665
蘋果將該功能集成到了UIActivityViewController。假設作了分享功能,則並不要加入特別的代碼,具體實現參考UIActivityViewController。
(1)MKMapCamera。可以將一個MKMapCamera對象加入到地圖上。在指明位置,角度和方向後將呈現3D的樣子…大概可以想象成一個數字版的Google街景..
(2)MKDirections獲取Apple提供的基於方向的路徑,而後可以用來將路徑繪製在本身的應用中。這可能對一些小的地圖服務提供商產生衝擊,但是仍是那句話。地圖是一個數據的世界,在擁有完備數據以前。Apple不是Google的對手。這個情況至少會持續好幾年(也有多是永遠)。
(3MKGeodesicPolyline建立一個隨地球曲率的線,並附加到地圖上。完畢一些視覺效果。
(4)MKMapSnapshotter使用其拍攝基於地圖的照片,或許各種簽到類應用會用到。
5.改變了overlay物件的渲染方式。
新增了UIDynamicItem託付。用來爲UIView制定動態行爲。固然其它不論什麼對象都能經過實現這組接口來定義動態行爲,僅僅只是在UIKit中可能應用最多。
所謂動態行爲。是指將現實世界的行爲或者特性引入到UI中。比方重力等。
經過實現UIDynamicItem,UIKit現在支持例如如下行爲: * UIAttachmentBehavior 鏈接兩個實現了UIDynamicItem的物體(如下簡稱動態物體),一個物體移動時。另外一個尾隨移動 * UICollisionBehavior指定邊界。使兩個動態物體可以進行碰撞 * UIGravityBehavior顧名思義,爲動態物體添加劇力模擬 * UIPushBehavior爲動態物體施加持續的力 * UISnapBehavior爲動態物體指定一個附着點,想象一下類似掛一幅畫在圖釘上的感受。
假設有開發遊戲的童鞋可能會認爲這些很是多都是作遊戲時候的需求,一種box2d之類的2D物理引擎的既視感躍然而出。沒錯的親。動態UI,加上以後要介紹的Sprite Kit,極大的擴展了使用UIKit進行遊戲開發的可能性。
另外要注意UIDynamicItem不只適用於UIKit。不論什麼對象都可以實現接口來得到動態物體的一些特性,因此說用來作一些3D的事情也不是沒有可能。假設認爲Cocos2D+box2d這種組合使用起來不方便的話,現在動態UIKit+SpriteKit給出了新的選擇。
AudioUnit框架中加入了在同一臺設備不一樣應用之間發送MIDI指令和傳送音頻的能力。
比方在一個應用中使用AudioUnit錄音,而後在另外一個應用中打開以處理等。在音源應用中聲明一個AURemoteIO實例來標爲Inter-App可用,在目標應用中使用新的發現接口來發現並獲取音頻。想法很是好,也算是在應用內共享邁出了一步,只是我對現在使用AudioUnit這種低層級框架的應用數量表示不樂觀。
或許從此會有一些爲更高層級設計的共享API提供給開發人員使用。畢竟要從AudioUnit開始處理音頻對於大多數開發人員來講並不是一件很是easy的事情。
可以當作是AirDrop不能直接使用的補償,代價是需要本身實現。MultipeerConnectivity框架可以用來發現和鏈接附近的設備,並數據傳輸。而這一切並不需要有網絡鏈接。可以看到Apple逐漸在文件共享方面一步步放開限制,但是固然所有這些都仍是被限制在sandbox裏的。
Store Kit在內購方面採用了新的訂單系統,這將可以實現對訂單的本機驗證。這是一次相應內購破解和有可能驗證失敗致使內購失敗的更新,蘋果但願藉此下降內購的實現流程,下降出錯,同一時候遏制內購破解氾濫。
前者可能沒有問題,但是後者的話。因爲objc的動態特性,決定了僅僅要有越獄存在,內購破解也是遲早的事情。只是這一點確實方便了沒有能力架設驗證服務器的小開發人員,這方面來講仍是很是好的。
一種全新的基於藍牙的傳輸協議,可以實現很是精確的定位
http://blog.csdn.net/boxertan/article/details/39783963
UIAlertController整合了actionsheet和alertview
【小技巧】:
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];
可以依據不一樣尺寸,橫屏豎屏在StoryBoard上或者Xib上對app進行適配
健康方面
智能家居方面
遊戲方面
假設你的程序有mac版本號,那麼它可以和ios版本號進行自由的交互
( 好比系統的電話,短信,facetime功能)
CLLocation的floor可以告訴你當前的樓層
指紋識別方面
一個新的相冊框架。替代了原來的AL
其至關於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
其類似於BaaS。與之不一樣的是,Cloud Kit傾向於對數據的集成。你可以不更改應用現有的數據模型和結構,而僅僅是使用 Cloud Kit 來從雲端獲取數據或者向雲端存儲數據。但是其最大限制在於僅僅能用於蘋果端。
http://blog.csdn.net/songhongri/article/details/39482067
【小技巧】:
// 當使用iOS8定位的時候需要請求用戶受權,且在info.plist里加入字段NSLocationAlwaysUsageDescription請求用戶受權的描寫敘述 // iOS7僅僅需要在info.plist里加入字段Privacy - Location Usage Description請求用戶受權的描寫敘述 if (IOS8) { [self.maneger requestAlwaysAuthorization];//請求用戶受權 }
Today Widget Extension
http://blog.csdn.net/kuloveyouwei/article/details/44019815
第三方輸入法 Extension
Document Picker Extension
Photo Editing Extension
Shared Extension
Action Extension
Watch Extension
一套圖形接口與OpenGL和Direct3D類似主要製做3D相關
蘋果支付相關sdk
假設cell用autolayout佈局,僅僅需要兩行代碼就可以實現本身主動計算高度
self.tableView.estimatedRowHeight = 44.0f; self.tableView.rowHeight = UITableViewAutomaticDimension;
WKWebView可以替代UIWebView
默認https,假設不支持https,需要到info.plist作配置
【小技巧】:
_locationManager.allowsBackgroundLocationUpdates = YES;
在iOS9中,假設使用URL scheme必須在"info.plist"中將你要在外部調用的URL scheme列爲白名單。不然沒法跳回來。
在info.plist中設置 LSApplicationQueriesSchemes類型爲數組。如下加入所有你用到的scheme
可以進行多窗體開發
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
因爲watchOS 2的架構變化。需要這麼一個東西來對iPhone和Watch進行雙向通訊
可以讓本身的app在系統搜索欄搜到內容
可以針對設備對app優化,讓安裝包變小
但你的app需要展現一個WebView又不需要太多定製的時候,用它來替換掉你現在在用的UIWebView或者WKWebView。他可以讓Safari以一個Controller的形式載入你的網頁,和系統的Safari全然共享Cookie和Autofill等特性,最重要的,Safari的JavaScript引擎
http://www.jianshu.com/p/b552bedbc3ef
可以用Xcode進行項目的本身主動化測試了
對遊戲的支持
(1)泛型 如:
NSArray<NSString*>* datas;
(2)可空標記
如:
@property (nonatomic, strong) NSArray *__nonull names; @property (nonatomic, strong, nonnull) NSarray *names;
(3)kindof
可以讓返回值用kindof
類似於安卓的線性佈局
控制器管理狀態欄
https://onevcat.com/2016/08/notification/
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
在 iOS 10中,咱們僅僅能用 SiriKit來作六類事情。各自是:
http://www.javashuo.com/article/p-nlkucemx-gw.html
siri建議
所有的功能都需要加隱私權限說明(彈窗),不然會閃退
tabBar.unselectedItemTintColor =[UIColor redColor];
self.labels.font =[UIFont preferredFontForTextStyle:UIFontTextStyleBody]; self.labels.adjustsFontForContentSizeCategory = YES;
那麼在iOS 10以前,咱們使用UIView作動畫效果或者本身定義一些layer的動畫,假設開始了,通常沒法進行中止操做更不能暫停操做,而且一些很是複雜的動畫處理也比較麻煩。但是在iOS10。蘋果退出了一個全新的API UIViewPropertyAnimator,可供咱們處理動畫操做UIViewPropertyAnimator是 iOS 10中新增的一個執行 View動畫的類,具備如下特色:
可中斷性
可擦除
可反轉性
豐富的動畫時間控制功能
iOS 10蘋果官方建議咱們使用sRGB,因爲它性能更好,色彩更豐富。
+ (UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS (10_0);
在iOS 10 UITextField加入了textContentType枚舉,指示文本輸入區域所指望的語義意義。
使用此屬性可以給鍵盤和系統信息,關於用戶輸入的內容的預期的語義意義。好比,您可以指定一個文本字段。用戶填寫收到一封電子郵件確認uitextcontenttypeemailaddress。當您提供有關您指望用戶在文本輸入區域中輸入的內容的信息時,系統可以在某些狀況下本身主動選擇適當的鍵盤,並提升鍵盤修正和主動與其它文本輸入機會的整合。
//值爲 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值爲10.000000[[UIDevice currentDevice] systemVersion].floatValue,
//值爲10.0 [[UIDevice currentDevice] systemVersion]
http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm_source=tuicool&utm_medium=referral
【小技巧】:
用 [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:nil]取代。
ios10字體變大,有可能字體顯示不全,因此lable大小不要寫死
iOS 10 對UICollectionView進一步的優化。
iOS 9中默認非HTTS的網絡是被禁止的,固然咱們也可以把NSAllowsArbitraryLoads設置爲YES禁用ATS。只是iOS 10從2017年1月1日起蘋果不一樣意咱們經過這種方法跳過ATS,也就是說強制咱們用HTTPS。假設不這種話提交App可能會被拒絕。但是咱們可以經過NSExceptionDomains來針對特定的域名開放HTTP可以easy經過審覈。