点滴分钟为您明白什么是ERP

平等、关于内存警告ios6蒙受丢掉了viewDidUnload,viewWillUnload这有限独网回调,收到内存警告时在didReceiveMemoryWarning中进行有关的处理。

管正规化的题材通俗化—— 
  
  ERP(Enterprise
Resource
Planning)企业资源计划系统,是依建立于信息技术基础及,以系统化的治本思想,为商家决策层和职工提供决策运行手段之保管平台。 
      
不知诸位听罢这样一词话没,“把大概的事体将复杂了,太累;把纷繁的事简便化为了,贡献。”在成千上万企业者看来,ERP(Enterprise
Resource
Planning)是一个格外复杂的巨大之系,要惦记当一次凭着螃蟹的口还真不容易,这也于得水平达拦了炎黄商家之信息化进程。在现行国际市场变化周期进一步短的景况下,中国铺信息化改造势在必行,因为公司的市场反应速度决定了店铺之生活发展。企业的反应速度不是小道消息,而是要来科学依据的,ERP正是为咱提供这么服务之一个信息化管理体系。那么,ERP是呀东西,很复杂呢??我思念当咱们看罢脚是略带故事后,应该就知什么是ERP,ERP能被咱们带来什么了。 
     
家中要客 
  一上中午,丈夫于他吃老婆打电话:“亲爱的婆姨,晚上自己怀念带几只同事回家吃饭可以呢?”(订货意向) 
  
  妻子:“当然好,来几乎单人口,几接触来,想吃啊菜?” 
  
  丈夫:“6只人,我们7点横赶回,准备把酒、烤鸭、番茄炒蛋、凉菜、蛋花汤……。你看而也?”
(商务沟通) 
  
  妻子:“没问题,我会准备好之。”
(订单确认) 
  
  妻子记录下得开的菜单
(MPS计划) ,具体而未雨绸缪的物:鸭、酒、番茄、鸡蛋、调料…… (BOM物料清单)
,发现需:1就鸭蛋,5瓶 
  
酒,4独鸡蛋……
(BOM展开) ,炒蛋需要6单鸡蛋,蛋花汤用4只鸡蛋 (共用物品) 。 
  
  打开冰箱一看
(库房) ,只剩余2只鸡蛋 (缺料) 。 
  
  到自由市场,妻子:“请问鸡蛋怎么卖?”
(采购询价) 
  
  小贩:“1个1元,半打5元,1打9.5元。” 
  
  妻子:“我就需要8单,但这次请1自。”
(经济批量置) 
  
  妻子:“这来一个异常之,换一个。”
(验收、退料、换料) 
  
  回到家中,准备洗采、切菜、炒菜……
(工艺路线) ,厨房中发出燃气灶、微波炉、电饭煲…… (工作骨干) 。 
  
  妻子发现拨鸭毛最费时间
(瓶颈工序,关键工艺路线) ,用微波炉自己开烤鸭可能来不及 (产能不足)
,于是阅览室在楼下的食堂里市现的 (产品委外) 。 
  
  下午4点,接到儿子的对讲机:“妈妈,晚上几个同学想来家用,你帮忙准备一下。”
(紧急订单) 
  
好的,你们想吃什么,爸爸晚上为发生客,你肯跟她俩共同吃为?” 
  
  “菜而看在办吧,但得要有海茄炒鸡蛋,我们不跟老人并吃,6:30破绽百出右回来。”
(不能够连特处理) 
  
  “好之,肯定被你们满意。”
(订单确定) 
  
  “鸡蛋还要不购了,打电话让小店送来。”
(紧急请) 
  
  6:30,一切准备妥当,可烤鸭还从来不送来,急忙打电话询问:“我是李太,怎么订的烤鸭还无送来?”
(采购委外单跟催) 
  
  “不好意思,送货的人数就走了,可能是堵车吧,马上就是见面暨之。” 
  
  门铃响了。 
  
  “李太太,这是若要之烤鸭。请在只有上签一个配。”
(验收、入库、转应付账款) 
  
  6:45,女儿的对讲机:“妈妈,我怀念今天带几个朋友回家吃饭可以吧?”
(呵呵,又是迫切订购意向,要求现货) 
  
  “不行呀,女儿,今天妈妈就用准备一定量席饭了,时间实际上是措手不及,真的坏抱歉,下次早点说,一定给你们准备好。”
(哈哈,这就 
  
凡ERP的利用局限,要有安定的外部环境,要来一个最少的提前期)
。 
  
  ……
…… 
  
  送活动了具有客人,疲惫的爱妻因为于沙发上针对丈夫说:“亲爱的,现在咱们家请客的频率十分大,应该使选购几厨房用品了
(设备进) ,最好会再次雇佣个稍阿姨 (连人力资源系统吧产生缺口了) 。 
  
  丈夫:“家里你做主,需要什么而不怕错过收拾吧。”
(通过核查) 
  
  妻子:“还有,最近女人用太特别,用你的私有钱来贴一下,好为?”
(最后便是许收货款的催要) 
  
  现在尚有人不理解ERP吗?记住,每一个及格的家主妇都是生厂长的雄强竞争者。 
而是丈夫是领导者。

亚、关于屏幕旋转同样ios6
废除了shouldAutorotateToInterfaceOrientation这个旋转屏幕的安装接口。必须于有限个新接口中安装旋转属性:shouldAutorotate、supportedInterfaceOrientations。收到旋转事件后的拍卖,同样以willRotateToInterfaceOrientation和didRotateFromInterfaceOrientation中进行。

其三、UISwitchios6产,新增了以下几个属性,可以设置开关的水彩与背景图。@property
(nonatomic,  retain) UIColor *tintColor;

 @property (nonatomic,  retain) UIColor *thumbTintColor; 

@property (nonatomic,  retain) UIImage *onImage; 

@property (nonatomic,  retain) UIImage *offImage;

季、UINavigationBarios6初增加了,设置阴影图片的属性。

1@property (nonatomic, retain) UIImage *shadowImage;

五、UIImage可以以ios6下蛋设置图片的scale比例尺寸了。

+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale; 

– (id)initWithData:(NSData *)data scale:(CGFloat)scale;

六、UIRefreshControl之前苹果官方是未曾现成的下拉刷新的控件,都是自己实现或者应用于成熟的开源库。ios6苹果在了UIRefreshControl,配合UITableView直接实现下拉刷新。

七、UICollectionView全新的聚合控件,应用场景有近似照片墙,瀑布流等。

iOS7新特性

一、已禁用-[UIDevice uniqueIdentifier]苹果总是把用户之苦衷看的大关键。

-[UIDevice
uniqueIdentifier]于iOS5实际于iOS5之下已为丢了,但是iOS7负既完全的剥夺了其。Xcode5甚至无会见允许你编译包含了导到-[UIDevice
uniqueIdentifier]的app。此外,iOS7事先的运了-[UIDevice
uniqueIdentifier]
的app如果在iOS7直达运行,它不见面返回设备的UUID,而是会回来一串字符串,以FFFFFFFF开头,跟着-[UIDevice
identifierForVendor]的十六上制值。

亚、UIPasteboard由共享成为沙盒化了UIPasteboard过去是故来做app之间的多寡分享的。UIPasteboard本无问题,但是开发者开始利用她来囤标识符,和另的相关app分享这些标识符的时光问题即使出现了。有一个运这种将玩的便是OpenUDID。在iOS7遭到,使用

+[UIPasteboard pasteboardWithName:create:]和 

+[UIPasteboard pasteboardWithUniqueName]开创剪贴板,而且只有针对同样的app
group可见,这样就是吃OpenUDID不那么来因此了。

其三、MAC地址不克更用来设别设备还有一个生成iOS设备唯一标示符的计是行使iOS设备的Media
Access
Control(MAC)地址。一个MAC地址是一个唯一的数码,它是大体网络层级方面分配为网络适配器的。这个地址苹果还产生其它的讳,比如就是硬件地址(Hardware
Address)或是Wifi地址,都是依靠同一的东西。有好多工程及框架都以是法子来转唯一的装备ID。比如说ODIN。然而,苹果并无期有人由此MAC地址来分辨用户,所以如果你于iOS7系及询问MAC地址,它本只会返回02:00:00:00:00:00。现在苹果显然的表明你当下

-[UIDevice identifierForVendor]或是-[ASIdentifierManager
advertisingIdentifier]来作你框架和行使之绝无仅有标示符。坦白的吧,应本着这些生成为不是那么的麻烦,见之下代码有:123NSString
*identifierForVendor = [[UIDevice currentDevice].identifierForVendor
UUIDString]; NSString *identifierForAdvertising =
[[ASIdentifierManager sharedManager].advertisingIdentifier
UUIDString];每种方法还适配一栽专门之用法:identifierForVendor对供应商来说是唯一的一个值,也就是说,由和一个小卖部发行的之app在同样的装备上运行的时段都见面生出这相同之标识符。然而,如果用户删除了此供应商之app然后又重新安装的语,这个标识符就见面无雷同。advertisingIdentifier会返回给于这设备及享有软件供应商平等的
一个价值,所以只能于广告之时候使用。这个值会因为许多情只要具有变更,比如说用户初始化设备的早晚就是会改。

季、iOS现在求app如需要使用麦克风,需要证实得用户同意以前要app需要采用用户之岗位,通讯录,日历,提醒和照片,接受推送消息,使用用户的应酬网络的上要验证得用户的允许。现在于iOS7中级,使用麦克风也需获得用户同意了。如果用户不允许app使用麦克风的话语,那么要以麦克风的app就未能够收到不至其它声响。以下的代码是故来询问用户是否允许app使用麦克风

//第一潮调用这个点子的时刻,系统会提示用户给他许你的app获取麦克风的数/

/ 其他时段调用方法的下,则未见面唤起用户//
而会传递之前的值来要求用户同意[[AVAudioSession sharedInstance]
requestRecordPermission:^(BOOL granted)

 {    if (granted) {        

// 用户同意获取数据    } else {       

 // 可以来得一个提拔框告诉用户之app没有获得允许?   
}}];你又还要小心,如果您在取得用户的同意之前运用其它方式来行使麦克风的说话,会唤起iOS系统弹出以下警示栏:

图片 1

五、[NSArray firstObject]的实现-[NSArray
firstObject]唯恐是Objective-C中被调用做多之API。在Open
Radar上一个简短的查证显示出一部分需苹果曾举行了笔录。好信息是今日这些需要已经得到了化解。.
firstObject的使用可以追溯至iOS4.0,但是那时就是一个民用方法。在iOS7缘前,工程师用底的方法来以她:12345NSArray
*arr = @[];id item = [arr firstObject]; // 在事先你得举行以下工作id
item = [arr count] > 0 ? arr[0] :
nil;因为地方的计很寻常,有些人将它们当作一个近似增加到NSArray中,然后创建他们好的firstObject方法。这个点子的题材是以此主意的名务必是绝无仅有的,否则的语句是措施所引发的题目无法预估。请保管检查你是否来外自定义的代码在NSArray上落实了firstObject,如果局部话看她是否是必须的,不是须的口舌就是拿它全部移除。

六、增加了instancetypeinstancetype让iOS7API变得愈难以理解。苹果改变了绝大多数
initializer和精炼构造函数(convenience
constructors),用instancetype代替id作返回路。但是是instancetype是呀也?instancetype用来在宣称一个道时喻编译器其返回路,它象征回去调用该办法的类的靶子。这正如前返回id的平凡做法要好,编译器可以本着回路做一些反省,如果起谬误,在编译时便能够提醒您,而未是当程序运行时来崩溃。同时,在调用子类方法时,使用它还得节约对返回值的强制类型转换,编译器能够科学推断方法的归来值类型。要说到instancetaype的弱点和长处也?基本上,在其余可能的图景下还好运用它。

七、设置UIImage的渲染模式:UIImage.renderingMode着色(Tint
Color)是iOS7界面中的一个至关重要变动,你可装一个UIImage在渲染时是不是用时视图的Tint
Color。UIImage新增了一个单单读属性:renderingMode,对应之还有一个猛增方法:imageWithRenderingMode:,它用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中带有下列值:12345678//
冲图片的施用环境以及所处之绘图上下文自动调整渲染模式UIImageRenderingModeAutomatic 
// 始终绘制图片原始状态,不下Tint
ColorUIImageRenderingModeAlwaysOriginal  // 始终冲Tint
Color绘制图片,忽小图片的颜料信息UIImageRenderingModeAlwaysTemplaterenderingMode属性的默认值是UIImageRenderingModeAutomatic,即UIImage是否动Tint
Color取决于它显得的职务。其他情况好看下面的图例:

图片 2

 

以下的代码说明了利用一个既定的rendering模式创造图片是多么简单:123UIImage
*img = [UIImage imageNamed:@”myimage”]; img = [img
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];八、tintcolor
VS
barTintColoriOS7吃君可采取一个加的颜料,甚至是记入颜色主题来叫所有app着色,帮助而的app脱颖而出。设置app的tint
color很简答,只要动UIView的新属性tintColor即可。这个特性是否听上去挺熟稔呢?应该充分熟稔,有些近乎,比如说UINaviagtionBar,UISearchBar,UITabBar以及UIToolbar已经来矣如此命名的性能。他们现时有发生矣一个新的性质:barTintColor。为了避免采取新属性的时刻发错误,如果您的appp需要支持iOS6以前的系统的时光,请检查一下。12345678UINavigationBar
*bar = self.navigationController.navigationBar;UIColor *color =
[UIColor greenColor]; if ([bar
respondsToSelector:@selector(setBarTintColor:)]) { // iOS 7+   
bar.barTintColor = color;} else { // what year is this? 2012?   
bar.tintColor = color;}

九、去丢了纹路颜色

图片 3

纹理颜色?对,不再以他们了,不可知更创好呈现纹理的颜料。根据UIInterface.h文件中之注解,-[UIColor
groupTableViewBackgroundColor]应该是一旦于iOS6当遭到便为删了,但是它们仅仅只是不像前那样返回纹理颜色了。然而,以下的颜色以iOS7当遭到为删了:12345+
(UIColor *)viewFlipsideBackgroundColor; + (UIColor
*)scrollViewTexturedBackgroundColor; + (UIColor
*)underPageBackgroundColor;

十、UIButtonTypeRoundRect被UIButtonTypeSystem取代了4673_140117110855_1

图片 4

以iOS开发正开即陪在若的老朋友现在呢吃剔除了,它便是UIButtonTypeRoundRect
,被新的UIButtonTypeSystem取代了。如果每次iOS系统的颁发还并未有新的效力会是呀则?这些新成效相信大部分开发者现已明白了,你也许会见意识有些新型之艺术以其构成到您的app中错过!

十一、检查无线路由是否可用定制一个视频播放器的能力在iOS版本每次的公布面临直接抱有提高。比如说,在iOS6前,你切莫能够以MPVolumeView中改AirPlay的icon。在iOS7中间,你可以经AirPlay,蓝牙恐其他的虚线机制了解是否发一个长距离的设备可用。了解她吧,就足以吃你的app在适宜的早晚召开适合的从业,比如说,在没远程设备的时就无显示AirPlay的icon。以下是新增加及MPVolumeView的新属性和推送1234

@property (nonatomic, readonly) BOOL wirelessRoutesAvailable; // 
是否发生配备得以连接的无线线路?@property (nonatomic, readonly) BOOL
wirelessRouteActive; // 设备现在是不是连达了网络NSString *const
MPVolumeViewWirelessRoutesAvailableDidChangeNotification;NSString
*const MPVolumeViewWirelessRouteActiveDidChangeNotification;


十二、了解蜂窝网络以iOS7底眼前,是下Reachability来检测设施是否连到WWAN或是Wifi的。iOS7每当是基础及再进了平等步,它会告诉你的配备连上之是那种蜂窝网络,比如就是Edge网络,HSDPA网络,或是LTE网络。告诉用户他们连续达之是啦种网络可优化用户体验,因为这样他们会了解网速如何,不见面失掉要需要大网速的纱要。这是CTTelephonyNetworkInfo的一些机能,它是CoreTelephony框架的一样片。iOS7尚增加了currentRadioAccessTechnology属性和CTRadioAccessTechnologyDidChangeNotification到者看似。还有一些初的字符串常量来定义可能的价,比如就是CTRadioAccessTechnologyLTE。以下代码告诉您以app
delegate中哪用这个新职能:123456789101112131415161718192021222324@import
CoreTelephony.CTTelephonyNetworkInfo; // new modules syntax!@interface
AppDelegate ()// we need to keep a reference to the
CTTelephonyNetworkInfo object, otherwise the notifications won’t be
fired!@property (nonatomic, strong) CTTelephonyNetworkInfo
*networkInfo;@end @implementation ViewController –
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   

 // whatever stuff your method does…        self.networkInfo =
[[CTTelephonyNetworkInfo alloc] init];    NSLog(@”Initial cell
connection: %@”, self.networkInfo.currentRadioAccessTechnology);   
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(radioAccessChanged) name:   
CTRadioAccessTechnologyDidChangeNotification object:nil];    

    // whatever stuff your method does…} – (void)radioAccessChanged { 
  NSLog(@”Now you’re connected via %@”,
self.networkInfo.currentRadioAccessTechnology);}
@end注意:研究一下CTTelephonyNetworkInfo.h
文件来探望是不是发生其它无线网络类型的之字符串常量。如果设备尚未连上的话,currentRadioAccessTechnology
则会回到nil。

十三、通过iCloud同步用户设备的密码iOS7与Mavericks增加了iCloud
Keychain来供密码,以及iCloud中有的机警数据的一块。开发者可以透过keychain中的kSecAttrSynchronizable
key来任何历dictionary对象。由于直接处理keychain比较麻烦,封装库提供了一个粗略的拍卖keychain的点子。SSKeychain封装库可能是极其显赫的底一个,作为同种植便利,现在她支持于iCloud同步。以下代码有显示了什么使用SSKeychain:

#import

– (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;}

毫无遗忘CocoaPods是飞方便安装SSKeychian的好点子。

十四、使用NSAttributedString显示HTML在app中应用webview有时会吃丁很沮丧,即使只是显示少量的HTMLneirong
,webview也会见吃大量底内存。现在iOS7为这些易得简单了,你得由用少量代码在HTML文件中创造一个NSAttributedString,比如:1234NSString
*html = @”Wow!NowiOScan create

NSAttributedString

from HTMLs!”;NSDictionary *options = @{NSDocumentTypeDocumentAttribute:
NSHTMLTextDocumentType}; NSAttributedString *attrString =
[[NSAttributedString alloc] initWithData:[html
dataUsingEncoding:NSUTF8StringEncoding] options:options
documentAttributes:nil
error:nil];现在若可在随意的UIKit对象及使NSAttributedString
了,比如就是一个UILabel或是一个UITextField。注意:NSHTMLTextDocumentType
只是NSDocumentTypeDocumentAttribute
key一种植或的价值。你还可应用NSPlainTextDocumentType,NSRTFTextDocumentType或是NSRTFDTextDocumentType。你还足以打NSAttributedString中开创一个HTML字符串,如下:12345NSAttributedString
*attrString; 

// from previous codeNSDictionary *options =
@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}; NSData
*htmlData = [attrString dataFromRange:NSMakeRange(0, [attrString
length]) documentAttributes:options error:nil];NSString *htmlString =
[[NSString alloc] initWithData:htmlData
encoding:NSUTF8StringEncoding];现在公估计在app中会还多之行使HTML了。

十五、使用原生的Base64Base64是应用ASCII码显示二进制数据的一模一样种流行艺术。直到现在,开发者还不得不采取开源之家伙来编码解码Base64的内容。现在iOS7引入了以下四种植新的NSData方法来操作Base64编码的数量:12345678//
From NSData.h- (id)initWithBase64EncodedString:(NSString *)base64String
options:(NSDataBase64DecodingOptions)options; – (NSString
*)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options;

  • (id)initWithBase64EncodedData:(NSData *)base64Data
    options:(NSDataBase64DecodingOptions)options; 

– (NSData
*)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options;这些办法可以扶持你轻易之用NSData对象转化为Base64,或者以Base64转化为NSData
object。见之下的例子:1234567NSData* sampleData = [@”Some sample data”
dataUsingEncoding:NSUTF8StringEncoding]; NSString * base64String =
[sampleData base64EncodedStringWithOptions:0];NSLog(@”Base64-encoded
string is %@”, base64String);

 // prints “U29tZSBzYW1wbGUgZGF0YQ==” NSData* dataFromString =
[[NSData alloc] initWithBase64EncodedString:base64String
options:0];NSLog(@”String is %@”,[NSString
stringWithUTF8String:[dataFromString bytes]]);

 // prints “String is Some sample
data”如果您待支持iOS6或者又早以前的系,你得下以下简单个点子:123456/*
These methods first appeared in NSData.h on OS X 10.9 and iOS 7.0. They
are deprecated in the same releases in favor of the methods in
theNSDataBase64Encodingcategory. However, these methods have existed for
several releases, so they may be used for applications targeting
releases prior to OS X 10.9 and iOS 7.0. */-
(id)initWithBase64Encoding:(NSString *)base64String;- (NSString
*)base64Encoding;

十六、使用UIApplicationUserDidTakeScreenshotNotification来检查截图在iOS7的眼前,像Snapshot或是Facebook
Poke这样的app是运用一些万分精美的方法来检测用户是否生截图

。然而,iOS7资一个全新的推送方式:UIApplicationUserDidTakeScreenshotNotification。只要像以往同等订阅即可知道呀时候截图了。注意:UIApplicationUserDidTakeScreenshotNotification
将会晤以截图完成之后显得。现在于截图截取之前无法取得通知。希望苹果会在iOS8当被益UIApplicationUserWillTakeScreenshotNotification。

十七、实现多语言语音合成而可以让app说话会不会见死好也?iOS7加盟了点滴只新类:AVSpeechSynthesizer
以及AVSpeechUtterance。这点儿独八九不离十可让您的app发声。很有意思不是啊?有多种语言可供应选择——Siri不见面说之言语也生,比如说巴西葡萄牙语。使用就片只类似吃app提供语言合成的效果非常简单。AVSpeechUtterance
代表你想说啊,如何说。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];

十八、使用了新的UIScreenEdgePanGestureRecognizerUIScreenEdgePanGestureRecognizer
继承自UIPanGestureRecognizer
,它可吃你从屏幕边界即可检测手势。使用初的手势识别器很粗略,见之下:UIScreenEdgePanGestureRecognizer
*recognizer = [[UIScreenEdgePanGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleScreenEdgeRecognizer:)];recognizer.edges =
UIRectEdgeLeft;[self.view addGestureRecognizer:recognizer];

十九、使用UIScrollViewKeyboardDismissMode实现了Message
app的行为像Messages
app一样当滚动的早晚可为键盘消失是一模一样种很好之体验。然而,将这种行为结合到你的app很麻烦。幸运的是,苹果吃UIScrollView添加了一个充分好用之习性keyboardDismissMode,这样可方便多。现在仅不过待以Storyboard中改变一个略的性,或者多一行代码,你的app可以同办到和Messages
app一样的事务了。这个特性使用了新的UIScrollViewKeyboardDismissMode
enum枚举类型。

此enum枚举类型可能的价值如下:UIScrollViewKeyboardDismissModeNone       
// the keyboard is not dismissed automatically when
scrollingUIScrollViewKeyboardDismissModeOnDrag      

// dismisses the keyboard when a drag
beginsUIScrollViewKeyboardDismissModeInteractive 

// the keyboard follows the dragging touch off screen, and may bepulled
upward again to cancel the
dismiss以下是给键盘可以当滚动的上没有得装的性质:

图片 5

 

二十、使用Core Image来检测眨眼以及微笑iOS给Core
Image增加了点滴栽人脸检测功能:CIDetectorEyeBlink以及CIDetectorSmile。这吗便是说你现在得在像被检测微笑和眨眼。

以下是以app中采取它的方法:

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!”);    

}}

二十一、给UITextView增加了链接现在在iOS添加你自己之Twitter账户更加简约了,现在您得吃一个NSAttributedString增加链接了,然后当它叫点击的时段唤起一个定制的action。首先,创建一个NSAttributedString然后增加被它长一个NSLinkAttributeName
属性,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)}; 

// assume that textView is a UITextView previously created (either by
code or Interface Builder)textView.linkTextAttributes = linkAttributes; 

// customizes the appearance of linkstextView.attributedText =
attributedString;textView.delegate =
self;这样即便得被链接以文件中显。然而,你呢得以控制当链接给点击的时节会来啊,实现此好下UITextViewDelegate共商的初的shouldInteractWithURL方法,就比如这样:123456789-
(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}iOS8初特点一、UIAlertController对alert&actionSheet的封装UIAlertController.h提示框按钮的挑123456789typedef
NS_ENUM(NSInteger, UIAlertActionStyle) {       
UIAlertActionStyleDefault = 0,        UIAlertActionStyleCancel,       
UIAlertActionStyleDestructive    }
NS_ENUM_AVAILABLE_IOS(8_0);提示框的样式123456789typedef
NS_ENUM(NSInteger, UIAlertControllerStyle) {       
UIAlertControllerStyleActionSheet = 0,       
UIAlertControllerStyleAlert    } NS_ENUM_AVAILABLE_IOS(8_0);
NS_CLASS_AVAILABLE_IOS(8_0)

 @interface UIAlertAction : NSObject创建提示框按钮1234567891011

+ (instancetype)actionWithTitle:(NSString *)title
style:(UIAlertActionStyle)style handler:(void (^)(UIAlertAction
*action))handler; @property (nonatomic, readonly) NSString *title;

 @property (nonatomic, readonly) UIAlertActionStyle style; @property
(nonatomic, getter=isEnabled) BOOL enabled; @end
NS_CLASS_AVAILABLE_IOS(8_0)

 @interface UIAlertController : UIViewController创建提示框1

+ (instancetype)alertControllerWithTitle:(NSString *)title
message:(NSString *)message
preferredStyle:(UIAlertControllerStyle)preferredStyle;添加按钮123

– (void)addAction:(UIAlertAction *)action;

 @property (nonatomic, readonly) NSArray
*actions;添加文本输入框123456789

– (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField
*textField))configurationHandler;

 @property (nonatomic, readonly) NSArray *textFields; @property
(nonatomic, copy) NSString *title;

 @property (nonatomic, copy) NSString *message; @property (nonatomic,
readonly) UIAlertControllerStyle
preferredStyle;简单实用示例:1234567891011

// 1.创办提示框对象,默认是actionSheet效果UIAlertController *alert =
[UIAlertController alertControllerWithTitle:@”注意”
message:@”我之变现方式转换了”
preferredStyle:UIAlertControllerStyleAlert];

 // 2.创办取消按钮并加加至提拔框上[alert addAction:[UIAlertAction
actionWithTitle:@”取消” style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action) {       
NSLog(@”取消按钮被点击了”);}]]; 

// 3.见提示框[self presentViewController:alert animated:YES
completion:nil];

亚、UIPopoverController直接通过present方式表现UIViewController.h1234567891011121314151617181920212223typedef
NS_ENUM(NSInteger, UIModalPresentationStyle)

 {       

 UIModalPresentationFullScreen = 0,        UIModalPresentationPageSheet
NS_ENUM_AVAILABLE_IOS(3_2),        UIModalPresentationFormSheet
NS_ENUM_AVAILABLE_IOS(3_2),        UIModalPresentationCurrentContext
NS_ENUM_AVAILABLE_IOS(3_2),        UIModalPresentationCustom
NS_ENUM_AVAILABLE_IOS(7_0),        UIModalPresentationOverFullScreen
NS_ENUM_AVAILABLE_IOS(8_0),       
UIModalPresentationOverCurrentContext NS_ENUM_AVAILABLE_IOS(8_0),   
    UIModalPresentationPopover NS_ENUM_AVAILABLE_IOS(8_0),       
UIModalPresentationNone NS_ENUM_AVAILABLE_IOS(7_0) = -1,    };
@property (nonatomic,readonly) UIPopoverPresentationController
*popoverPresentationController
NS_AVAILABLE_IOS(8_0);使用示例:1234567891011//
1.创立内容控制器UITableViewController *contentVc =
[[UITableViewController alloc] init]; 

// 2.1 设置呈现方式

contentVc.modalPresentationStyle = UIModalPresentationPopover; 

//
2.2安在导航栏的左侧按钮呈现contentVc.popoverPresentationController.barButtonItem
= self.navigationItem.leftBarButtonItem; 

// 3.呈现[self presentViewController:contentVc animated:YES
completion:nil];以前的法门:12345678910

// 1.创立内容控制器UITableViewController *contentVc =
[[UITableViewController alloc] init]; 

// 2.创建popoverUIPopoverController *popover = [[UIPopoverController
alloc] initWithContentViewController:contentVc];
popover.popoverContentSize = CGSizeMake(100, 100);

 // 3.呈现[popover
presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

老三、获取用户授权的用户隐私保护地图定位示例
:1234567891011121314151617181920212223242526//
导入定位框架#import@interface ViewController ()// 设置固定目标

@property(nonatomic,strong)CLLocationManager* maneger;

@end

@implementation ViewController

– (void)viewDidLoad {

[super viewDidLoad];

//
当使用iOS8稳定的时光需要请用户授权,且当info.plist里添加字段NSLocationAlwaysUsageDescription
请求用户授权的讲述

// iOS7仅仅需要以info.plist里添加字段Privacy – Location Usage
Description 请求用户授权的叙说

// 不待还写下面的代码

if (IOS8) {

[self.maneger requestAlwaysAuthorization];//请求用户授权

}

// 开启定位

[self.maneger startUpdatingLocation];

}

季、针对屏幕适配应运而生的size classes

size
classes是为化解storyboard只能订制一栽屏幕样式的题材,它不再是实际的尺码,而是抽象尺寸通过宽/高
的compact、any、regular 组成了九种结缘包含了有着苹果设备的尺码。

iOS9新特性

无异于、网络适配

iOS9系统发送的网络要将统一用TLS 1.2 SSL。采用TLS 1.2
协议,目的是劫持增强数据访问安全,而且系统Foundation框架下的有关网要,将不再默认使用HTTP等不安全的网络协议,而默认使用TLS
1.2。服务器因此用更新,以解析相关数据。如不更新,可经在 info.plist
中宣示,倒退回不安全的纱要。

哟是SSL/TLS?跟HTTP和HTTPS有啊关系?

和过去同样,先说结论:

1

HTTP + SSL/TLS + TCP = HTTPS

TLS 是 SSL 新的别称。举个例子:

“TLS1.0”之被“SSL3.1”,犹“公元2015”之为“民国104”,或者是“一千克”之被“一公斤”,或者是“半斤”之于“八鲜”:称呼不同,但意思同样。

SSL 3.0本子后的迭代版本被重新命名为TLS 1.0,也不怕是说:

1   TLS 1.0 = SSL 3.1

因此她们是一个物,我们平常也常常简单视 “SSL/TLS”
这种说法。常用之是下这些:

1  SSL 2.0

2  SSL 3.0

3  TLS 1.0 (SSL 3.1) 

4  TLS 1.1 (SSL 3.1)

5 TLS 1.2 (SSL 3.1)

那么怎么标题是“使用HTTPS”而并未提及SSL和TLS什么事?
要明了这个,要看下一个公式:

1

HTTP + SSL/TLS + TCP = HTTPS

于个如:如果原本的 HTTP 是塑料水管,容易让戳破;那么现在新设计之 HTTPS
就比如是在原来的塑料水管之外,再管一层金属水管。一来,原有的塑水管照样运行;二来,用金属加固了后头,不容易给戳破。

眼前,应用最常见的凡TLS 1.0,接下去是SSL
3.0。但是,主流浏览器还已实现了TLS
1.2底支撑。Apple让你的HTTP采用SSL/TLS协议,就是受你从HTTP转至HTTPS。

原先的HTTP不是也能够因此吗?为什么而用SSL/TLS,闲得十分?!Apple是勿是还要以倒人类?

免以SSL/TLS的HTTP通信,就是匪加密的通信!

具有消息公开传播,带来了三怪风险:

扒窃听风险(eavesdropping):第三正在可以得知通信内容。

篡改风险(tampering):第三方得以改通信内容。

以假乱真风险(pretending):第三正值可以充他人身份与通信。

SSL/TLS协议是以解决当时三百般风险而规划的,希望达到:

享有消息还是加密传播,第三在无法窃听。

具备校验机制,一旦被歪曲,通信双方见面立马发现。

配备身份证件,防止身份让仿冒。

争适配?—弱弱地问下:加班而多久?

刚刚使文章开始所说:

TLS 1.2 协议 强制增强数据访问安全 系统 Foundation
框架下之系网要,将不再默认使用 HTTP 等不安全的网络协议,而默认使用
TLS 1.2。服务器因此用更新,以解析相关数据。如不更新,可透过当
Info.plist 中声明,倒退回不安全的纱要。

方案一:立即吃商家之服务端升级使用TLS 1.2。

方案二:虽Apple不建议,但可经当 Info.plist
中扬言,倒退回不安全之大网要依然能够给App访问指定http,甚至随意的http。

地方是较审慎的做法,指定了能够顾哪些特定的HTTP。当然也起强力的做法:
彻底倒退回不安全之HTTP网络要,能随便进行HTTP请求,比如您于开同迟迟浏览器App,或者您想偷懒,或者后台想偷懒,或者企业未叫您升级服务器。但当下Apple的官方文档并未提及如何以
info.plist 配置可以参考本文:http://blog.6ag.cn/1065.html

亚、更活的后台定位

假使不适配iOS9,就非克偷偷以后台定位。不过苹果用允许出现这种光景:

同一App中之多独location
manager,一些只能以前台定位,另一些不过在后台定位,并不过天天被或关闭特定location
manager的后台定位。

怎样偷偷在后台定位:

// 1. 实例化定位管理器

_locationManager = [[CLLocationManager alloc] init];

// 2. 安代理

_locationManager.delegate = self;

// 3. 定位精度

[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

// 4.请求用户权限:分为:?只当前台开定位?在后台也可一定,

//注意:建议单独请?和?中之一个,如果少单权力都用,只请?即可,

//??这样的逐一,将促成bug:第一坏开行程序后,系统将仅请?的权杖,?的权杖系统不会见呈请,只见面当生一样破启动以时请?

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8)
{

//[_locationManager
requestWhenInUseAuthorization];//?只于前台开定位

[_locationManager requestAlwaysAuthorization];//?在后台也可稳定

}

// 5.iOS9新特性:将同意出现这种状况:同一app中几近单location
manager:一些只好于前台定位,另一对而当后台定位(并而天天禁止其后台定位)。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9)
{

_locationManager.allowsBackgroundLocationUpdates = YES;

}

// 6. 更新用户位置

[_locationManager startUpdatingLocation];

然而要依在这种办法尝试,而并未配置info.plist,100%公的次序会倒掉,并报错:

*** Assertion failure in -[CLLocationManager
setAllowsBackgroundLocationUpdates:],
/BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1808.1.5/Framework/CoreLocation/CLLocationManager.m:593

比方以 info.plist 配置如下:

图片 6

对应的 Info.plist 的XML源码是:

图片 7

三、Bitcode

bitcode的亮应该是将程序编译成的同等栽过渡代码,然后苹果还将这过渡代码编译成可尽之次。bitcode也允许苹果于晚期还优化我们先后的二进制文件,有类似于App瘦身之思想。未来Watch应用得保证含Bitcode,iOS不强制,但Xcode7默认会开启Bitcode。

故此了xcode7的编译器编译之前从未问题之花色或者会见并发下列报错。

XXXX’ does not contain bitcode. You must rebuild it with bitcode enabled
(Xcode setting ENABLE_BITCODE), obtain an updated library from the
vendor, or disable bitcode forthistarget. forarchitecture arm64

题材之由来是:某些第三在库还免支持bitcode。要不然是等待库的开发者升级了这起意义我们更新库,要不就把这个bitcode禁用。禁用Bitcode,方法展现下图:

图片 8

 

季、企业级分发

iOS9之前,企业级分发十分便宜:点击App出现“信任按钮”。

iOS9下,企业级分发ipa包用面临与Mac上dmg安装包一样的看待。默认不能够安装,也不再出现“信任按钮”,必须让用户展开gif图中之装。

图片 9

五、URL scheme

URL
scheme一般以的气象是应用程序有分享要过其他平台授权的效应,分享要授权后再次跨回来。在iOS8连无召开了多克,在iOS9丁,如果采取URL
scheme必须在”info.plist”中将你如果在表面调用的URL
scheme列为白名单,否则不能够应用。

canOpenURL: failed forURL : “mqzone://qqapp”- error: “This app is not
allowed to query for scheme mqzone”

实际的缓解方案吧是使于info.plist中设置 LSApplicationQueriesSchemes
类型为数组,下面添加所有你用到的scheme

图片 10

 

引进一篇博客:
http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

里最为根本之是以下部分:

If you call the “canOpenURL” method on a URL that is not in your
whitelist, it will return “NO”, even if there is an app installed that
has registered to handle this scheme. A “This app is not allowed to
query for scheme xxx” syslog entry will appear.

If you call the “openURL” method on a URL that is not in your whitelist,
it will fail silently. A “This app is not allowed to query for scheme
xxx” syslog entry will appear.

六、新字体

iOS8蒙,字体是Helvetica,中文的字体有点类似于“华文细黑”。只是苹果手机打带渲染,所以看上去可能比较平常的华文细黑要入眼。iOS9面临,中文系统字体变为了垄断为华夏计划的“苹方”
有点类似于同一种植word字体“幼圆”。字体有细微的加粗效果,并且最好重点的凡书间隙变充分了!

据此重重本写很了width的label可能会见现出“…”的情形。

图片 11

图片 12

地方立片摆图为堪直观的张同一个界面,同一个label的变更。

故而为了在界面显示上不离谱,就到底一定长度的亲笔也要建议以sizetofit
或者ios向上取整 ceilf() 或者提前计算。

1  CGSize size = [title sizeWithAttributes:@{NSFontAttributeName:
[UIFont systemFontOfSize:14.0f]}];

2  CGSize adjustedSize = CGSizeMake(ceilf(size.width),
ceilf(size.height));

七、tableview

尽管如此现在底iOS9已经推送正式版了,但是iOS9运时还是碰头感觉到到App比原先更加卡顿了,tableView拖动时卡顿显示的极其引人注目。
并且之前碰到一个bug,原本好的类型用xcode7如出一辙编译,tableView刷新出了问题
,[tableView reloadData]废,有一行cell明明改变了可是刷新不下。
感觉可能是是办法和某种新加的风味冲突了,猜测可能是reloadData的操作为延缓至下一个RunLoop执行最后失效。

釜底抽薪之措施是,注释[tableView
reloadData],改用一些刷新,问题居然就迎刃而解了。

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

八、iPad适配Slide Over 和 Split View

iPad适配Slide Over 和 Split View,若想适配multi
tasking特性,唯一的建议:

废弃纯代码,改用storyboard、xib,纵观苹果WWDC所有Demo均是这般。

1 Mysteries of Auto Layout, Part 1

2 What’s New in Storyboards

3 Implementing UI Designs in Interface Builder

4 Getting Started with Multitasking on iPad in iOS 9

5 Optimizing Your App for Multitasking on iPad in iOS