图片服务器缓存(图片文件服务器)「图片服务器解决方案」

  总结了几个月的东西终于能和各人分享了,不多说,直接看东西!

  1、克制手机就寝

  [UIApplicationsharedApplication].idleTimerDisabled=YES;

  2、隐蔽某行cell

  -(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath

  {

  //假如是你必要隐蔽的那一行,返回高度为0

  if(indexPath.row==YouWantToHideRow)

  return0;

  return44;

  }

  //然后再你必要隐蔽cell的时间调用

  [self.tableViewbeginUpdates];

  [self.tableViewendUpdates];

  3、禁用button高亮

  button.adjustsImageWhenHighlighted=NO;

  大概在创建的时间

  UIButton*button=[UIButtonbuttonWithType:UIButtonTypeCustom];

  4、tableview碰到这种报错failedtoobtainacellfromitsdataSource

是由于你的cell被调用的早了。先循环利用了cell,后又创建cell。次序错了

大概缘故起因:1、xib的cell没有注册2、内存中已经有这个cell的缓存了(也就是说通过你的cellId找到的cell并不是你想要的范例),这时间必要改下cell的标识

  5、cocoapods报这个错误:unabletoaccess'https://github.com/facebook/pop.git/':Operationtimedoutafter0millisecondswith0outof0bytesreceived

  办理办法:缘故起因大概是网络题目,网络哀求超时了,只必要重试就行了

  6、cocoapods出现ERROR:Whileexecutinggem...(Errno::EPERM)

  办理办法:

  https://segmentfault.com/q/1010000002926243

  7、动画切换window的根控制器

  //options是动画选项

  [UIViewtransitionWithView:[UIApplicationsharedApplication].keyWindowduration:0.5foptions:UIViewAnimationOptionTransitionCrossDissolveanimations:^{

  BOOLoldState=[UIViewareAnimationsEnabled];

  [UIViewsetAnimationsEnabled:NO];

  [UIApplicationsharedApplication].keyWindow.rootViewController=[RootViewControllernew];

  [UIViewsetAnimationsEnabled:oldState];

  }completion:^(BOOLfinished){

  }];

  8、去除数组中重复的对象

  NSArray*newArr=[oldArrvalueForKeyPath:@“@distinctUnionOfObjects.self"];

  9、编译的时间碰到nosuchfileordirectory:/users/apple/XXX

是由于编译的时间,在此路径下找不到这个文件,办理这个题目,起首是是要查抄缺少的文件是不是在工程中,假如不在工程中,必要从本地拖进去,假如发现已经存在工程中了,大概拖进去还是报错,这时间必要去buildphases中搜刮这个文件,这时间很大概会搜出现两个雷同的文件,这时间,有一个路径是精确的,删除别的一个即可。假如删除了还是不可,必要把两个都删掉,然后重新往工程里拖进这个文件即可

buildphases

  10、iOS8体系中,tableView最好实现下-tableView:heightForRowAtIndexPath:这个署理方法,要否则在iOS8中大概就会出现表现不全大概无法相应变乱的题目

  11、iOS8中实现侧滑功能的时间这个方法必须实现,要否则在iOS8中无法侧滑

  //必须写的方法,和editActionsForRowAtIndexPath配对利用,内里什么不写也行

  -(void)tableView:(UITableView*)tableViewcommitEditingStyle:(UITableViewCellEditingStyle)editingStyleforRowAtIndexPath:(NSIndexPath*)indexPath{

  }

  12、三个关照

NSSystemTimeZoneDidChangeNotification监听修改时间界面的两个按钮状态变革

UIApplicationSignificantTimeChangeNotification监听用户改变时间(只要点击主动设置按钮就会调用)NSSystemClockDidChangeNotification监听用户修改时间(时间差别才会调用)

  13、SDWebImage本地缓存偶然间会害人。假如之前缓存过一张图片,纵然下次服务器换了这张图片,但是图片url没换,用sdwebimage下载下来的还是从前那张,以是碰到这种题目,不要先去怼服务器,清空下缓存再试就好了。

  14、上线前留意:

  1)、删掉代码中全部的测试代码

  2)、假如背景有考核模式,提示背景开启此模式

  3)、主流程再跑一跑

  4)、全局搜刮waring,查抄全部标记waring的地方

  15、跳进app权限设置

  //跳进app设置

  if(UIApplicationOpenSettingsURLString!=NULL){

  NSURL*url=[NSURLURLWithString:UIApplicationOpenSettingsURLString];

  [[UIApplicationsharedApplication]openURL:url];

  }

  }

  16、给一个view截图

  UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES,0.0);

  [view.layerrenderInContext:UIGraphicsGetCurrentContext()];

  UIImage*img=UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  17、开辟中假如要动态修改tableView的tableHeaderView大概tableFooterView的高度,必要给tableView重新设置,而不是直接更改高度。精确的做法是重新设置一下tableView.tableFooterView=更改过高度的view。为什么?着实在iOS8以上直接改高度是没有题目的,在iOS8中出现了contentSize禁绝确的题目,这是办理办法。

  18、留意对象为nil的时间,调用此对象分类的方法不会实行

  19、collectionView的内容小于其宽高的时间是不能滚动的,设置可以滚动:

  collectionView.alwaysBounceHorizontal=YES;

  collectionView.alwaysBounceVertical=YES;

  20、设置navigationBar上的title颜色和巨细

  [self.navigationController.navigationBarsetTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColoryouColor],NSFontAttributeName:[UIFontsystemFontOfSize:15]}]

  21、颜色转图片

  +(UIImage*)cl_imageWithColor:(UIColor*)color{

  CGRectrect=CGRectMake(0.0f,0.0f,1.0f,1.0f);

  UIGraphicsBeginImageContext(rect.size);

  CGContextRefcontext=UIGraphicsGetCurrentContext();

  CGContextSetFillColorWithColor(context,[colorCGColor]);

  CGContextFillRect(context,rect);

  UIImage*image=UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  returnimage;

  }

  22、view设置圆角

  #defineViewBorderRadius(View,Radius,Width,Color)

  [View.layersetCornerRadius:(Radius)];

  [View.layersetMasksToBounds:YES];

  [View.layersetBorderWidth:(Width)];

  [View.layersetBorderColor:[ColorCGColor]]//view圆角

  23、强/弱引用

  #defineWeakSelf(type)__weaktypeof(type)weak##type=type;//weak

  #defineStrongSelf(type)__strongtypeof(type)type=weak##type;//strong

  24、由角度转换弧度

  #defineDegreesToRadian(x)(M_PI*(x)/180.0)

  25、由弧度转换角度

  #defineRadianToDegrees(radian)(radian*180.0)/(M_PI)

  26、获取图片资源

  #defineGetImage(imageName)[UIImageimageNamed:[NSStringstringWithFormat:@"%@",imageName]]

  27、获取temp

  #definePathTempNSTemporaryDirectory()

  28、获取沙盒Document

  #definePathDocument[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject]

  29、获取沙盒Cache

  #definePathCache[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)firstObject]

  30、GCD代码只实行一次

  #definekDISPATCH_ONCE_BLOCK(onceBlock)staticdispatch_once_tonceToken;dispatch_once(onceToken,onceBlock);

  31、自界说NSLog

  #ifdefDEBUG

  #defineNSLog(fmt,...)NSLog((@"%s[Line%d]"fmt),__PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__)

  #else

  #defineNSLog(...)

  #endif

  32、Font

  #defineFontL(s)[UIFontsystemFontOfSize:sweight:UIFontWeightLight]

  #defineFontR(s)[UIFontsystemFontOfSize:sweight:UIFontWeightRegular]

  #defineFontB(s)[UIFontsystemFontOfSize:sweight:UIFontWeightBold]

  #defineFontT(s)[UIFontsystemFontOfSize:sweight:UIFontWeightThin]

  #defineFont(s)FontL(s)

  33、FORMAT

  #defineFORMAT(f,...)[NSStringstringWithFormat:f,##__VA_ARGS__]

  34、在主线程上运行

  #definekDISPATCH_MAIN_THREAD(mainQueueBlock)dispatch_async(dispatch_get_main_queue(),mainQueueBlock);

  35、开启异步线程

  #definekDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),globalQueueBlocl);

  36、关照

  #defineNOTIF_ADD(n,f)[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(f)name:nobject:nil]

  #defineNOTIF_POST(n,o)[[NSNotificationCenterdefaultCenter]postNotificationName:nobject:o]

  #defineNOTIF_REMV()[[NSNotificationCenterdefaultCenter]removeObserver:self]

  37、随机颜色

  +(UIColor*)RandomColor{

  NSIntegeraRedValue=arc4random()%255;

  NSIntegeraGreenValue=arc4random()%255;

  NSIntegeraBlueValue=arc4random()%255;

  UIColor*randColor=[UIColorcolorWithRed:aRedValue/255.0fgreen:aGreenValue/255.0fblue:aBlueValue/255.0falpha:1.0f];

  returnrandColor;

  }

  38、获取window

  +(UIWindow*)getWindow{

  UIWindow*win=nil;//[UIApplicationsharedApplication].keyWindow;

  for(iditemin[UIApplicationsharedApplication].windows){

  if([itemclass]==[UIWindowclass]){

  if(!((UIWindow*)item).hidden){

  win=item;

  break;

  }

  }

  }

  returnwin;

  }

  39、修改textField的placeholder的字体颜色、巨细

  [textFieldsetValue:[UIColorredColor]forKeyPath:@"_placeholderLabel.textColor"];

  [textFieldsetValue:[UIFontboldSystemFontOfSize:16]forKeyPath:@"_placeholderLabel.font"];

  40、同一收起键盘

  [[[UIApplicationsharedApplication]keyWindow]endEditing:YES];

  41、控制屏幕旋转,在控制器中写

  /**是否支持主动转屏*/

  -(BOOL)shouldAutorotate{

  returnYES;

  }

  /**支持哪些屏幕方向*/

  -(UIInterfaceOrientationMask)supportedInterfaceOrientations{

  returnUIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight;

  }

  /**默认的屏幕方向(当前ViewController必须是通过模态出来的UIViewController(模态带导航的无效)方式显现出来的,才会调用这个方法)*/

  -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{

  returnUIInterfaceOrientationLandscapeLeft|UIInterfaceOrientationLandscapeRight;

  }

  42、获取app缓存巨细

  -(CGFloat)getCachSize{

  NSUIntegerimageCacheSize=[[SDImageCachesharedImageCache]getSize];

  //获取自界说缓存巨细

  //用罗列器遍历一个文件夹的内容

  //1.获取文件夹罗列器

  NSString*myCachePath=[NSHomeDirectory()stringByAppendingPathComponent:@"Library/Caches"];

  NSDirectoryEnumerator*enumerator=[[NSFileManagerdefaultManager]enumeratorAtPath:myCachePath];

  __blockNSUIntegercount=0;

  //2.遍历

  for(NSString*fileNameinenumerator){

  NSString*path=[myCachePathstringByAppendingPathComponent:fileName];

  NSDictionary*fileDict=[[NSFileManagerdefaultManager]attributesOfItemAtPath:patherror:nil];

  count+=fileDict.fileSize;//自界说全部缓存巨细

  }

  //得到是字节转化为M

  CGFloattotalSize=((CGFloat)imageCacheSize+count)/1024/1024;

  returntotalSize;

  }

  43、整理app缓存

  -(void)handleClearView{

  //删除两部分

  //1.删除sd图片缓存

图片服务器缓存(图片文件服务器) 图片服务器缓存(图片文件服务器)「图片服务器解决方案」 行业资讯

  //先打扫内存中的图片缓存

  [[SDImageCachesharedImageCache]clearMemory];

  //打扫磁盘的缓存

  [[SDImageCachesharedImageCache]clearDisk];

  //2.删除本身缓存

  NSString*myCachePath=[NSHomeDirectory()stringByAppendingPathComponent:@"Library/Caches"];

  [[NSFileManagerdefaultManager]removeItemAtPath:myCachePatherror:nil];

  }

  44、模子转字典

  staticNSSet*classes;

  -(NSMutableDictionary*)getParameterDictionary{

  NSMutableDictionary*dict=[NSMutableDictionarydictionary];

  Classc=self.class;

  while(c){

  unsignedcount;

  objc_property_t*properties=class_copyPropertyList([cclass],count);

  for(inti=0;icount;i++){

  NSString*key=[NSStringstringWithUTF8String:property_getName(properties[i])];

  dict[key]=[selfvalueForKey:key];

  }

  free(properties);

  //得到父类

  c=class_getSuperclass(c);

  if([selfisClassFromFoundation:c])break;

  }

  returndict;

  }

  -(BOOL)isClassFromFoundation:(Class)c

  {

  if(c==[NSObjectclass]||c==[NSManagedObjectclass])returnYES;

  __blockBOOLresult=NO;

  [[selffoundationClasses]enumerateObjectsUsingBlock:^(ClassfoundationClass,BOOL*stop){

  if([cisSubclassOfClass:foundationClass]){

  result=YES;

  *stop=YES;

  }

  }];

  returnresult;

  }

  -(NSSet*)foundationClasses

  {

  if(classes==nil){

  //聚集中没有NSObject,由于险些全部的类都是继承自NSObject,具体是不是NSObject必要特别判定

  classes=[NSSetsetWithObjects:

  [NSURLclass],

  [NSDateclass],

  [NSValueclass],

  [NSDataclass],

  [NSErrorclass],

  [NSArrayclass],

  [NSDictionaryclass],

  [NSStringclass],

  [NSAttributedStringclass],nil];

  }

  returnclasses;

  }

  45、互换两个方法实现

  ClassaClass=[selfclass];

  SELoriginalSelector=@selector(viewWillAppear:);

  SELswizzledSelector=@selector(xxx_viewWillAppear:);

  MethodoriginalMethod=class_getInstanceMethod(aClass,originalSelector);

  MethodswizzledMethod=class_getInstanceMethod(aClass,swizzledSelector);

  BOOLdidAddMethod=

  class_addMethod(aClass,

  originalSelector,

  method_getImplementation(swizzledMethod),

  method_getTypeEncoding(swizzledMethod));

  if(didAddMethod){

  class_replaceMethod(aClass,

  swizzledSelector,

  method_getImplementation(originalMethod),

  method_getTypeEncoding(originalMethod));

  }else{

  method_exchangeImplementations(originalMethod,swizzledMethod);

  }

  46、打印百分号和引号

  NSLog(@"%%");

  NSLog(@""");

  47、几个常用权限判定

  if([CLLocationManagerauthorizationStatus]==kCLAuthorizationStatusDenied){

  NSLog(@"没有定位权限");

  }

  AVAuthorizationStatusstatusVideo=[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeVideo];

  if(statusVideo==AVAuthorizationStatusDenied){

  NSLog(@"没有摄像头权限");

  }

  //是否有麦克风权限

  AVAuthorizationStatusstatusAudio=[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeAudio];

  if(statusAudio==AVAuthorizationStatusDenied){

  NSLog(@"没有灌音权限");

  }

  [PHPhotoLibraryrequestAuthorization:^(PHAuthorizationStatusstatus){

  if(status==PHAuthorizationStatusDenied){

  NSLog(@"没有相册权限");

  }

  }];

  48、获取手机型号

  +(NSString*)getDeviceInfo{

  structutsnamesystemInfo;

  uname(systemInfo);

  NSString*platform=[NSStringstringWithCString:systemInfo.machineencoding:NSASCIIStringEncoding];

  if([platformisEqualToString:@"iPhone1,1"])return@"iPhone2G";

  if([platformisEqualToString:@"iPhone1,2"])return@"iPhone3G";

  if([platformisEqualToString:@"iPhone2,1"])return@"iPhone3GS";

  if([platformisEqualToString:@"iPhone3,1"])return@"iPhone4";

  if([platformisEqualToString:@"iPhone3,2"])return@"iPhone4";

  if([platformisEqualToString:@"iPhone3,3"])return@"iPhone4";

  if([platformisEqualToString:@"iPhone4,1"])return@"iPhone4S";

  if([platformisEqualToString:@"iPhone5,1"])return@"iPhone5";

  if([platformisEqualToString:@"iPhone5,2"])return@"iPhone5";

  if([platformisEqualToString:@"iPhone5,3"])return@"iPhone5c";

  if([platformisEqualToString:@"iPhone5,4"])return@"iPhone5c";

  if([platformisEqualToString:@"iPhone6,1"])return@"iPhone5s";

  if([platformisEqualToString:@"iPhone6,2"])return@"iPhone5s";

  if([platformisEqualToString:@"iPhone7,1"])return@"iPhone6Plus";

  if([platformisEqualToString:@"iPhone7,2"])return@"iPhone6";

  if([platformisEqualToString:@"iPhone8,1"])return@"iPhone6s";

  if([platformisEqualToString:@"iPhone8,2"])return@"iPhone6sPlus";

  //日行两款手机型号均为日本独占,大概利用索尼FeliCa付出方案而不是苹果付出

  if([platformisEqualToString:@"iPhone9,1"])return@"国行、日版、港行iPhone7";

  if([platformisEqualToString:@"iPhone9,2"])return@"港行、国行iPhone7Plus";

  if([platformisEqualToString:@"iPhone9,3"])return@"美版、台版iPhone7";

  if([platformisEqualToString:@"iPhone9,4"])return@"美版、台版iPhone7Plus";

  if([platformisEqualToString:@"iPhone8,4"])return@"iPhoneSE";

  if([platformisEqualToString:@"iPod1,1"])return@"iPodTouch1G";

  if([platformisEqualToString:@"iPod2,1"])return@"iPodTouch2G";

  if([platformisEqualToString:@"iPod3,1"])return@"iPodTouch3G";

  if([platformisEqualToString:@"iPod4,1"])return@"iPodTouch4G";

  if([platformisEqualToString:@"iPod5,1"])return@"iPodTouch5G";

  if([platformisEqualToString:@"iPad1,1"])return@"iPad1G";

  if([platformisEqualToString:@"iPad2,1"])return@"iPad2";

  if([platformisEqualToString:@"iPad2,2"])return@"iPad2";

  if([platformisEqualToString:@"iPad2,3"])return@"iPad2";

  if([platformisEqualToString:@"iPad2,4"])return@"iPad2";

  if([platformisEqualToString:@"iPad2,5"])return@"iPadMini1G";

  if([platformisEqualToString:@"iPad2,6"])return@"iPadMini1G";

  if([platformisEqualToString:@"iPad2,7"])return@"iPadMini1G";

  if([platformisEqualToString:@"iPad3,1"])return@"iPad3";

  if([platformisEqualToString:@"iPad3,2"])return@"iPad3";

  if([platformisEqualToString:@"iPad3,3"])return@"iPad3";

  if([platformisEqualToString:@"iPad3,4"])return@"iPad4";

  if([platformisEqualToString:@"iPad3,5"])return@"iPad4";

  if([platformisEqualToString:@"iPad3,6"])return@"iPad4";

  if([platformisEqualToString:@"iPad4,1"])return@"iPadAir";

  if([platformisEqualToString:@"iPad4,2"])return@"iPadAir";

  if([platformisEqualToString:@"iPad4,3"])return@"iPadAir";

  if([platformisEqualToString:@"iPad4,4"])return@"iPadMini2G";

  if([platformisEqualToString:@"iPad4,5"])return@"iPadMini2G";

  if([platformisEqualToString:@"iPad4,6"])return@"iPadMini2G";

  if([platformisEqualToString:@"i386"])return@"iPhoneSimulator";

  if([platformisEqualToString:@"x86_64"])return@"iPhoneSimulator";

  returnplatform;

  }

  49、长按复制功能

  -(void)viewDidLoad

  {

  [self.viewaddGestureRecognizer:[[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(pasteBoard:)]];

  }

  -(void)pasteBoard:(UILongPressGestureRecognizer*)longPress{

  if(longPress.state==UIGestureRecognizerStateBegan){

  UIPasteboard*pasteboard=[UIPasteboardgeneralPasteboard];

  pasteboard.string=@"必要复制的文本";

  }

  }

  50、cocoapods升级

  在终端实行sudogeminstall-n/usr/local/bincocoapods--pre

  51、设置启动页后,依然表现之前的

  删除app,手机重启,重新安装

  52、判定图片范例

  //通过图片Data数据第一个字节来获取图片扩展名

  -(NSString*)contentTypeForImageData:(NSData*)data

  {

  uint8_tc;

  [datagetBytes:clength:1];

  switch(c)

  {

  case0xFF:

  return@"jpeg";

  case0x89:

  return@"png";

  case0x47:

  return@"gif";

  case0x49:

  case0x4D:

  return@"tiff";

  case0x52:

  if([datalength]12){

  returnnil;

  }

  NSString*testString=[[NSStringalloc]initWithData:[datasubdataWithRange:NSMakeRange(0,12)]encoding:NSASCIIStringEncoding];

  if([testStringhasPrefix:@"RIFF"]

  [testStringhasSuffix:@"WEBP"])

  {

图片服务器缓存(图片文件服务器) 图片服务器缓存(图片文件服务器)「图片服务器解决方案」 行业资讯

  return@"webp";

  }

  returnnil;

  }

  returnnil;

  }

  53、获取手机和app信息

  NSDictionary*infoDictionary=[[NSBundlemainBundle]infoDictionary];

  CFShow(infoDictionary);

  //app名称

  NSString*app_Name=[infoDictionaryobjectForKey:@"CFBundleDisplayName"];

  //app版本

  NSString*app_Version=[infoDictionaryobjectForKey:@"CFBundleShortVersionString"];

  //appbuild版本

  NSString*app_build=[infoDictionaryobjectForKey:@"CFBundleVersion"];

  //手机序列号

  NSString*identifierNumber=[[UIDevicecurrentDevice]uniqueIdentifier];

  NSLog(@"手机序列号:%@",identifierNumber);

  //手机别名:用户界说的名称

  NSString*userPhoneName=[[UIDevicecurrentDevice]name];

  NSLog(@"手机别名:%@",userPhoneName);

  //装备名称

  NSString*deviceName=[[UIDevicecurrentDevice]systemName];

  NSLog(@"装备名称:%@",deviceName);

  //手机体系版本

  NSString*phoneVersion=[[UIDevicecurrentDevice]systemVersion];

  NSLog(@"手机体系版本:%@",phoneVersion);

  //手机型号

  NSString*phoneModel=[[UIDevicecurrentDevice]model];

  NSLog(@"手机型号:%@",phoneModel);

  //地方型号(国际化地区名称)

  NSString*localPhoneModel=[[UIDevicecurrentDevice]localizedModel];

  NSLog(@"国际化地区名称:%@",localPhoneModel);

  NSDictionary*infoDictionary=[[NSBundlemainBundle]infoDictionary];

  //当前应用名称

  NSString*appCurName=[infoDictionaryobjectForKey:@"CFBundleDisplayName"];

  NSLog(@"当前应用名称:%@",appCurName);

  //当前应用软件版本比如:1.0.1

  NSString*appCurVersion=[infoDictionaryobjectForKey:@"CFBundleShortVersionString"];

  NSLog(@"当前应用软件版本:%@",appCurVersion);

  //当前应用版本号码int范例

  NSString*appCurVersionNum=[infoDictionaryobjectForKey:@"CFBundleVersion"];

  NSLog(@"当前应用版本号码:%@",appCurVersionNum);

  54、获取一个类的全部属性

  idLenderClass=objc_getClass("Lender");

  unsignedintoutCount,i;

  objc_property_t*properties=class_copyPropertyList(LenderClass,outCount);

  for(i=0;ioutCount;i++){

  objc_property_tproperty=properties[i];

  fprintf(stdout,"%s%sn",property_getName(property),property_getAttributes(property));

  }

  55、image圆角

  -(UIImage*)circleImage

  {

  //NO代表透明

  UIGraphicsBeginImageContextWithOptions(self.size,NO,1);

  //得到上下文

  CGContextRefctx=UIGraphicsGetCurrentContext();

  //添加一个圆

  CGRectrect=CGRectMake(0,0,self.size.width,self.size.height);

  //方形变圆形

  CGContextAddEllipseInRect(ctx,rect);

  //裁剪

  CGContextClip(ctx);

  //将图片画上去

  [selfdrawInRect:rect];

  UIImage*image=UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  returnimage;

  }

  56、image拉伸

  +(UIImage*)resizableImage:(NSString*)imageName

  {

  UIImage*image=[UIImageimageNamed:imageName];

  CGFloatimageW=image.size.width;

  CGFloatimageH=image.size.height;

  return[imageresizableImageWithCapInsets:UIEdgeInsetsMake(imageH*0.5,imageW*0.5,imageH*0.5,imageW*0.5)resizingMode:UIImageResizingModeStretch];

  }

  57、JSON字符串转字典

  +(NSDictionary*)parseJSONStringToNSDictionary:(NSString*)JSONString{

  NSData*JSONData=[JSONStringdataUsingEncoding:NSUTF8StringEncoding];

  NSDictionary*responseJSON=[NSJSONSerializationJSONObjectWithData:JSONDataoptions:NSJSONReadingMutableLeaveserror:nil];

  returnresponseJSON;

  }

  58、身份证号验证

  -(BOOL)validateIdentityCard{

  BOOLflag;

  if(self.length=0){

  flag=NO;

  returnflag;

  }

  NSString*regex2=@"^(d{14}|d{17})(d|[xX])$";

  NSPredicate*identityCardPredicate=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",regex2];

  return[identityCardPredicateevaluateWithObject:self];

  }

  59、获取装备mac地点

  +(NSString*)macAddress{

  intmib[6];

  size_tlen;

  char*buf;

  unsignedchar*ptr;

  structif_msghdr*ifm;

  structsockaddr_dl*sdl;

  mib[0]=CTL_NET;

  mib[1]=AF_ROUTE;

  mib[2]=0;

  mib[3]=AF_LINK;

  mib[4]=NET_RT_IFLIST;

  if((mib[5]=if_nametoindex("en0"))==0){

  printf("Error:if_nametoindexerrorn");

  returnNULL;

  }

  if(sysctl(mib,6,NULL,len,NULL,0)0){

  printf("Error:sysctl,take1n");

  returnNULL;

  }

  if((buf=malloc(len))==NULL){

  printf("Couldnotallocatememory.Rrror!n");

  returnNULL;

  }

  if(sysctl(mib,6,buf,len,NULL,0)0){

  printf("Error:sysctl,take2");

  returnNULL;

  }

  ifm=(structif_msghdr*)buf;

  sdl=(structsockaddr_dl*)(ifm+1);

  ptr=(unsignedchar*)LLADDR(sdl);

  NSString*outstring=[NSStringstringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",

  *ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5)];

  free(buf);

  returnoutstring;

  }

  60、导入自界说字体库

  1、找到你想用的字体的ttf格式,拖入工程

  2、在工程的plist中增长一行数组,“Fontsprovidedbyapplication”

  3、为这个key添加一个item,value为你刚才导入的ttf文件名

  4、直接利用即可:label.font=[UIFontfontWithName:@"你刚才导入的ttf文件名"size:20.0];

  61、拿到当前正在表现的控制器,不管是push进去的,还是present进去的都能拿到

  -(UIViewController*)getVisibleViewControllerFrom:(UIViewController*)vc{

  if([vcisKindOfClass:[UINavigationControllerclass]]){

  return[selfgetVisibleViewControllerFrom:[((UINavigationController*)vc)visibleViewController]];

  }elseif([vcisKindOfClass:[UITabBarControllerclass]]){

  return[selfgetVisibleViewControllerFrom:[((UITabBarController*)vc)selectedViewController]];

  }else{

  if(vc.presentedViewController){

  return[selfgetVisibleViewControllerFrom:vc.presentedViewController];

  }else{

  returnvc;

  }

  }

  }

  62、runtime为一个类动态添加属性

  //动态添加属性的本质是:让对象的某个属性与值产生关联

  objc_setAssociatedObject(self,WZBPlaceholderViewKey,placeholderView,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

  63、获取runtime为一个类动态添加的属性

  objc_getAssociatedObject(self,WZBPlaceholderViewKey);

  64、KVO监听某个对象的属性

  //添加监听者

  [selfaddObserver:selfforKeyPath:propertyoptions:NSKeyValueObservingOptionNewcontext:nil];

  //当监听的属性值变革的时间会来到这个方法

  -(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary*)changecontext:(void*)context{

  if([keyPathisEqualToString:@"property"]){

  [selftextViewTextChange];

  }else{

  }

  }

  65、Reachability判定网络状态

  NetworkStatusstatus=[[ReachabilityreachabilityForInternetConnection]currentReachabilityStatus];

  if(status==NotReachable){

  NSLog(@"当前装备无网络");

  }

  if(status==ReachableViaWiFi){

  NSLog(@"当前wifi网络");

  }

  if(status==NotReachable){

  NSLog(@"当前蜂窝移动网络");

  }

  由于微信字数限定缘故起因,放不下全文,请点击阅读原文,查察完备版文章。

客户评论

我要评论