收到内存警告需要到didReceiveMemoryWarning中处理
【小技巧】:
iOS6以后的内存处理方式
[objc] view plain copy -(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函数。 } }【小技巧】:
iOS6以后的内存处理方式,用下面两个方法代替
[objc] view%20plain copy - (BOOL)shouldAutorotate; - (NSUInteger)supportedInterfaceOrientations;还需要在info.plist进行配置
【小技巧】:与UITableView配合实现下拉刷新
【小技巧】:可以实现瀑布流
提供了UUID,IDFA,IDFV,OpenUDID
【小技巧】:
UUID:
UUID是Universally%20Unique%20Identifier的缩写,中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。这样,每个人都可以建立不与其它人冲突的UUID。在此情况下,就不需考虑数据库建立时的名称重复问题。苹果公司建议使用UUID为应用生成唯一标识字符串。
开发者可以在应用第一次启动时调用一 次,然后将该串存储起来,替代UDID来使用。但是,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。使用UUID,就要考虑应用被删除后再重新安装时的处理。一个解决的办法是:UUID一般只生成一次,保存在iOS系统里面,如果应用删除了,重装应用之后它的UUID还是一样的,除非系统重置 。但是不能保证在以后的系统升级后还能用(如果系统保存了该信息就能用)。
IDFA:
[objc] view%20plain copy #import <AdSupport/AdSupport.h> NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];广告标示符是iOS%206中另外一个新的方法,提供了一个方法advertisingIdentifier,通过调用该方法会返回一个NSUUID实例,最后可以获得一个UUID,由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。
在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置|隐私|广告追踪 里重置此id的值,或限制此id的使用,故此id有可能会取不到值,但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是戳戳有余了。
注意:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户
IDFV:
[objc] view%20plain copy NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];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的值和之前不同。
OpenUDID:
[cpp] view%20plain copy 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];每台iOS设备的OpenUDID是通过第一个带有OpenUDID%20SDK包的App生成,如果你完全删除全部带有OpenUDID%20SDK包的App(比如恢复系统等),那么OpenUDID会重新生成,而且和之前的值会不同,相当于新设备;
优点是没有用到MAC地址;不同设备能够获取各自唯一的识别码,保证了唯一性,可以用于以往UDID的相关用途;从代码分析OpenUDID的获取,识别码获取方便并且保存谨慎。缺点是当将设备上所有使用了OpenUDID方案的应用程序删除,且设备关机重启,xcode彻底清除并重启,重装应用程序去获取OpenUDID,此时OpenUDID变化,与之前不一样了,所有OpenUDID应用卸载后,由Uipasteboard保存的数据即被清除,重装故会重新获取新的OpenUDID。
那么当因为用户干预或者恶意程序,致使UIPasteboard数据清除,从而导致OpenUDID被删除,重装也会获取新的OpenUDID。
iOS7之前的UIPasteboard只要应用知道其名字,即可访问其中的内容,而OpenUDID的实现方式也依赖于此,让开发者能使用一组UUID来标记一个设备。iOS7之后,+[UIPasteboard%20pasteboardWithName:create:]和+[UIPasteboard%20pasteboardWithUniqueName]这两个方法产生UIPasteboard仅供同组应用之间共享数据,也就是Info.plist中CFBundleIdentifier字段的前两段标识(例如com.yourcompany.xx的com.yourcompany)相同的应用才能相互共享数据。不同组应用之间相同名字的UIPasteboard是不同的,而不是以前的同一个。所以当前版本的OpenUDID随着iOS7的出现也将慢慢失去其效用。
instancetype用来在声明一个方法时告诉编译器其返回类型,它表示返回调用该方法的类的对象。这比之前返回id的通常做法要好,编译器可以对返回类型做一些检查,如果出现错误,在编译时就能提醒你,而不是在程序运行时发生崩溃。同时,在调用子类方法时,使用它还可以省去对返回值的强制类型转换,编译器能够正确推断方法的返回值类型。
着色(Tint%20Color)是iOS7界面中的一个重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint%20Color。UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:
[objc] view%20plain copy UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。 UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。 UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。renderingMode属性的默认值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint%20Color取决于它显示的位置。
【小技巧】:
[objc] view%20plain copy UIImage *img = [UIImage imageNamed:@"myimage"]; img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];有些类,比如说UINaviagtionBar,UISearchBar,UITabBar以及UIToolbar已经有了这么命名的属性。他们现在有了一个新的属性:barTintColor。
【小技巧】:
为了避免使用新属性的时候犯错误,如果你的appp需要支持iOS6以前的系统的时候,请检查一下。
[objc] view%20plain copy 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。
[objc] view%20plain copy @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。
【小技巧】:
[objc] view%20plain copy @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注意:研究一下CTTelephonyNetworkInfo.h文件来看看是否有其他无线网络类型的的字符串常量。如果设备没有连上的话currentRadioAccessTechnology则会返回nil。
iOS7以及Mavericks增加了iCloud%20Keychain来提供密码,以及iCloud中一些敏感数据的同步。开发者可以通过keychain中的kSecAttrSynchronizable%20key来遍历dictionary对象。
由于直接处理keychain比较难,封装库提供了一个简单的处理keychain的方法。SSKeychain封装库可能是最有名的的一个,作为一种福利,现在它支持在iCloud同步。
【小技巧】:
[objc] view%20plain copy - (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。
【小技巧】:
[objc] view%20plain copy //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];【小技巧】:
[objc] view%20plain copy 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 ,它可以让你从屏幕边界即可检测手势。
【小技巧】:
[objc] view%20plain copy UIScreenEdgePanGestureRecognizer *recognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action: @selector(handleScreenEdgeRecognizer:)]; recognizer.edges = UIRectEdgeLeft; [self.view addGestureRecognizer:recognizer];滚动的时候可以让键盘消失是一种非常好的体验,苹果给UIScrollView添加了一个很好用的属性keyboardDismissMode,现在仅仅只需要在Storyboard中改变一个简单的属性,或者增加一行代码,你的app可以和办到和Messages%20app一样的事情了。
[objc] view%20plain copy UIScrollViewKeyboardDismissModeNone UIScrollViewKeyboardDismissModeOnDrag UIScrollViewKeyboardDismissModeInteractiveiOS给Core%20Image增加了两种人脸检测功能:CIDetectorEyeBlink以及CIDetectorSmile。这也就是说你现在可以在照片中检测微笑以及眨眼。
【小技巧】:
[objc] view%20plain copy 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!"); } }【小技巧】:
[objc] view%20plain copy 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现在支持如下行为: *%20UIAttachmentBehavior 连接两个实现了UIDynamicItem的物体(以下简称动态物体),一个物体移动时,另一个跟随移动 *%20UICollisionBehavior指定边界,使两个动态物体可以进行碰撞 *%20UIGravityBehavior顾名思义,为动态物体增加重力模拟 *%20UIPushBehavior为动态物体施加持续的力 *%20UISnapBehavior为动态物体指定一个附着点,想象一下类似挂一幅画在图钉上的感觉。
如果有开发游戏的童鞋可能会觉得这些很多都是做游戏时候的需求,一种box2d之类的2D物理引擎的既视感跃然而出。没错的亲,动态UI,加上之后要介绍的Sprite%20Kit,极大的扩展了使用UIKit进行游戏开发的可能性。另外要注意UIDynamicItem不仅适用于UIKit,任何对象都可以实现接口来获得动态物体的一些特性,所以说用来做一些3D的事情也不是没有可能。如果觉得Cocos2D+box2d这样的组合使用起来不方便的话,现在动态UIKit+SpriteKit给出了新的选择。
AudioUnit框架中加入了在同一台设备不同应用之间发送MIDI指令和传送音频的能力。比如在一个应用中使用AudioUnit录音,然后在另一个应用中打开以处理等。在音源应用中声明一个AURemoteIO实例来标为Inter-App可用,在目标应用中使用新的发现接口来发现并获取音频。想法很好,也算是在应用内共享迈出了一步,不过我对现在使用AudioUnit这样的低层级框架的应用数量表示不乐观。也许今后会有一些为更高层级设计的共享API提供给开发者使用。毕竟要从AudioUnit开始处理音频对于大多数开发者来说并不是一件很容易的事情。
可以看成是AirDrop不能直接使用的补偿,代价是需要自己实现。MultipeerConnectivity框架可以用来发现和连接附近的设备,并传输数据,而这一切并不需要有网络连接。可以看到Apple逐渐在文件共享方面一步步放开限制,但是当然所有这些都还是被限制在sandbox里的。
Store%20Kit在内购方面采用了新的订单系统,这将可以实现对订单的本机验证。这是一次对应内购破解和有可能验证失败导致内购失败的更新,苹果希望藉此减少内购的实现流程,减少出错,同时遏制内购破解泛滥。前者可能没有问题,但是后者的话,因为objc的动态特性,决定了只要有越狱存在,内购破解也是早晚的事情。不过这一点确实方便了没有能力架设验证服务器的小开发者,这方面来说还是很好的。
一种全新的基于蓝牙的传输协议,可以实现非常精确的定位
http://blog.csdn.net/boxertan/article/details/39783963
UIAlertController整合了actionsheet和alertview
【小技巧】:
[objc] view%20plain copy 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版本进行自由的交互
(%20例如系统的电话,短信,facetime功能)
CLLocation的floor可以告诉你当前的楼层
指纹识别方面
一个新的相册框架,替代了原来的AL
其相当于ipad中的UIPopoverController,在某个空间周边显示一个气泡菜单
【小技巧】:
[objc] view%20plain copy 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%20Kit倾向于对数据的集成。你可以不更改应用现有的数据模型和结构,而只是使用 Cloud%20Kit 来从云端获取数据或者向云端存储数据。但是其最大限制在于只能用于苹果端。
http://blog.csdn.net/songhongri/article/details/39482067
【小技巧】:
[objc] view%20plain copy // 当使用iOS8定位的时候需要请求用户授权,且在info.plist里添加字段NSLocationAlwaysUsageDescription请求用户授权的描述 // iOS7仅仅需要在info.plist里添加字段Privacy - Location Usage Description请求用户授权的描述 if (IOS8) { [self.maneger requestAlwaysAuthorization];//请求用户授权 }Today%20Widget%20Extension
http://blog.csdn.net/kuloveyouwei/article/details/44019815
第三方输入法 Extension
Document%20Picker%20Extension
Photo%20Editing%20Extension
Shared%20Extension
Action%20Extension
Watch%20Extension
一套图形接口 与OpenGL 和Direct3D类似主要制作3D相关
苹果支付相关sdk
如果cell用autolayout布局,只需要两行代码就可以实现自动计算高度
[objc] view%20plain copy self.tableView.estimatedRowHeight = 44.0f; self.tableView.rowHeight = UITableViewAutomaticDimension;WKWebView可以替代UIWebView
默认https,如果不支持https,需要到info.plist做配置
【小技巧】:
[objc] view%20plain copy _locationManager.allowsBackgroundLocationUpdates = YES;在iOS9中,如果使用URL%20scheme必须在"info.plist"中将你要在外部调用的URL%20scheme列为白名单,否则无法跳回来。
在info.plist中设置 LSApplicationQueriesSchemes类型为数组,下面添加所有你用到的scheme
可以进行多窗口开发
由于watchOS%202的架构变化,需要这么一个东西来对iPhone和Watch进行双向通信
可以让自己的app在系统搜索栏搜到内容
可以针对设备对app优化,让安装包变小
但你的app需要展示一个WebView又不需要太多定制的时候,用它来替换掉你现在在用的UIWebView或者WKWebView。他可以让Safari以一个Controller的形式加载你的网页,和系统的Safari完全共享Cookie和Autofill等特性,最重要的,Safari的javaScript引擎
http://www.jianshu.com/p/b552bedbc3ef
可以用Xcode进行项目的自动化测试了
对游戏的支持
(1)泛型 如:
[objc] view%20plain copy NSArray<NSString*>* datas;(2)可空标记
如:
[objc] view%20plain copy @property (nonatomic, strong) NSArray *__nonull names; @property (nonatomic, strong, nonnull) NSarray *names;(3)kindof
可以让返回值用kindof
类似于安卓的线性布局
控制器管理状态栏
https://onevcat.com/2016/08/notification/
iMessage%20Extension
Notification%20Content%20Extension
Notification%20Service%20Extension
Audio%20Unit%20Extension
Broadcast%20UI%20Extension
Broadcast%20Upload%20Extension
Call%20Directory%20Extension
Content%20Blocker%20Extension
Intents%20Extension
Intents%20UI%20Extension
Shared%20Links%20Extension
Sticker%20Pack%20Extension
在 iOS%2010 中,我们只能用 SiriKit来做六类事情,分别是:
语音和视频通话发送消息发送或接收付款搜索照片约车管理健身https://my.oschina.net/u/2340880/blog/751442
siri建议
所有的功能都需要加隐私权限说明(弹窗),否则会闪退
那么在iOS%2010之前,我们使用UIView做动画效果或者自定义一些layer的动画,如果开始了,一般无法进行停止操作更不能暂停操作,而且一些非常复杂的动画处理也比较麻烦,但是在iOS10,苹果退出了一个全新的API UIViewPropertyAnimator,可供我们处理动画操作UIViewPropertyAnimator 是 iOS%2010 中新增的一个执行 View动画的类,具有以下特点:
可中断性
可擦除
可反转性
丰富的动画时间控制功能
iOS%2010 苹果官方建议我们使用sRGB,因为它性能更好,色彩更丰富。
[objc] view%20plain copy + (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进一步的优化。
UICollectionView cell pre-fetching预加载机制UICollectionView and UITableView prefetchDataSource新增的API针对self-sizing cells的改进Interactive reorderingiOS 9中默认非HTTS的网络是被禁止的,当然我们也可以把NSAllowsArbitraryLoads设置为YES禁用ATS。不过iOS 10从2017年1月1日起苹果不允许我们通过这个方法跳过ATS,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒绝。但是我们可以通过NSExceptionDomains来针对特定的域名开放HTTP可以容易通过审核。
新闻热点
疑难解答