iOS 常用公共方法

1. 获取磁盘总空间大小或可用空间大小

//磁盘总空间

+ (CGFloat)diskOfAllSizeMBytes{

            CGFloatsize =0.0;

            NSError*error;

           NSDictionary*dic = [[NSFileManagerdefaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];

           if(error) { 

            #ifdef DEBUG

             NSLog(@"error: %@", error.localizedDescription);

            #endif

               }else{

                NSNumber*number = [dic objectForKey:NSFileSystemSize];      //获取总空间大小

                //NSNumber*number = [dic objectForKey:NSFileSystemFreeSize]; //获取可用空间大小 

                size = [number floatValue]/1024/1024;    }

returnsize;

}

2. 获取指定路径下某个文件的大小

+ (longlong)fileSizeAtPath:(NSString *)filePath{    

NSFileManager *fileManager = [NSFileManager defaultManager];

if(![fileManagerfileExistsAtPath:filePath]){

return0 ;

    }else{

return[[fileManagerattributesOfItemAtPath:filePatherror:nil] fileSize];

   }

}

3. 获取文件夹下所有文件的大小

+ (longlong)folderSizeAtPath:(NSString*)folderPath{

NSFileManager*fileManager = [NSFileManagerdefaultManager];

        if(![fileManager fileExistsAtPath:folderPath]){

         return 0:

        }else{

         NSEnumerator*filesEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];

          NSString*fileName;

         longlongfolerSize =0;

           while((fileName = [filesEnumerator nextObject]) !=nil) {

              NSString*filePath = [folderPath stringByAppendingPathComponent:fileName];        

              folerSize += [selffileSizeAtPath:filePath];   

               }

             returnfolerSize; 

   }

}

4.获取字符串(或汉字)首字母

+ (NSString*)firstCharacterWithString:(NSString*)string{

NSMutableString*str = [NSMutableStringstringWithString:string];

CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformMandarinLatin,NO);

CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);

NSString*pingyin = [str capitalizedString];

return[pingyin substringToIndex:1];

}

5. 将字符串数组按照元素首字母顺序进行排序分组


+ (NSDictionary*)dictionaryOrderByCharacterWithOriginalArray:(NSArray*)array{

     if(array.count ==0) {returnnil;}

      for(id  obj  in array) {

                 if(![obj isKindOfClass:[NSStringclass]])  {  

                   returnnil;      

                }    

    }

    UILocalizedIndexedCollation*indexedCollation = [UILocalizedIndexedCollationcurrentCollation];

      NSMutableArray*objects = [NSMutableArrayarrayWithCapacity:indexedCollation.sectionTitles.count];

       //创建27个分组数组

        for(inti =0; i < indexedCollation.sectionTitles.count; i++) {

               NSMutableArray*obj = [NSMutableArrayarray];       

                [objects addObject:obj];    

           }

       NSMutableArray*keys = [NSMutableArrayarrayWithCapacity:objects.count];

        //按字母顺序进行分组

       NSInteger   lastIndex =-1;

          for(inti =0; i < array.count; i++) {

                   NSIntegerindex = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];       

                   [[objects objectAtIndex:index] addObject:array[i]];        

                  lastIndex = index;    

                     }

                    //去掉空数组

                  for(inti =0; i < objects.count; i++) {

                   NSMutableArray*obj = objects[i];

                     if(obj.count ==0) {           

                    [objects removeObject:obj];        

               }    

            }

                 //获取索引字母

               for(NSMutableArray*objinobjects) {

                NSString*str = obj[0];

                NSString*key = [selffirstCharacterWithString:str];       

                 [keys addObject:key];    

                   }

               NSMutableDictionary*dic = [NSMutableDictionarydictionary];   

               [dic setObject:objects forKey:keys];

        returndic;

 }

//获取字符串(或汉字)首字母

+ (NSString*)firstCharacterWithString:(NSString*)string{

    NSMutableString*str = [NSMutableStringstringWithString:string];

     CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformMandarinLatin,NO);

     CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);

     NSString*pingyin = [str capitalizedString];

     return[pingyin substringToIndex:1];

}

使用如下:

NSArray *arr = @[@"guangzhou", @"shanghai", @"北京", @"henan", @"hainan"];

 NSDictionary *dic= [UtilitiesdictionaryOrderByCharacterWithOriginalArray:arr];

NSLog(@"\n\ndic: %@",dic);

输出结果如下:


输出结果


6.获取当前时间

//format: @"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH时mm分ss秒"

+ (NSString*)currentDateWithFormat:(NSString*)format{

 NSDateFormatter*dateFormatter = [[NSDateFormatteralloc] init];   

  [dateFormatter setDateFormat:format];

return[dateFormatter stringFromDate:[NSDatedate]];

}

8. 计算上次日期距离现在多久, 如 xx 小时前、xx 分钟前等

/**

*  计算上次日期距离现在多久

*

*  @param lastTime    上次日期(需要和格式对应)

*  @param format1    上次日期格式

*  @param currentTime 最近日期(需要和格式对应)

*  @param format2    最近日期格式

*

*  @return xx分钟前、xx小时前、xx天前

*/

+ (NSString*)timeIntervalFromLastTime:(NSString*)lastTime   

                                             lastTimeFormat:(NSString*)format1                       

                                              ToCurrentTime:(NSString*)currentTime                   

                                        currentTimeFormat:(NSString*)format2{

                      //上次时间

                    NSDateFormatter*dateFormatter1 = [[NSDateFormatter alloc]init];    

                   dateFormatter1.dateFormat = format1;

                   NSDate*lastDate = [dateFormatter1 dateFromString:lastTime];

                     //当前时间

                    NSDateFormatter*dateFormatter2 = [[NSDateFormatter alloc]init];    

                     dateFormatter2.dateFormat = format2;

                     NSDate*currentDate = [dateFormatter2 dateFromString:currentTime];

                     return[Utilities timeIntervalFromLastTime:lastDate ToCurrentTime:currentDate];

}

+ (NSString*)timeIntervalFromLastTime:(NSDate*)lastTime 

                                     ToCurrentTime:(NSDate*)currentTime{

                     NSTimeZone*timeZone = [NSTimeZone systemTimeZone];

                  //上次时间

                 NSDate*lastDate = [lastTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:lastTime]];

               //当前时间

                NSDate*currentDate = [currentTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:currentTime]];

              //时间间隔

              NSIntegerintevalTime = [currentDate timeIntervalSinceReferenceDate] - [lastDate timeIntervalSinceReferenceDate];

           //秒、分、小时、天、月、年

          NSInteger minutes = intevalTime /60;

           NSInteger hours = intevalTime /60/60;

            NSInteger day = intevalTime /60/60/24;

            NSInteger month = intevalTime /60/60/24/30;

            NSIntegeryers = intevalTime /60/60/24/365;

                  if(minutes <=10) {

                       return@"刚刚";    

                   }else if(minutes <60){

                    return [NSStringstringWithFormat:@"%ld分钟前",(long)minutes];    

                  }else  if(hours <24){

                    return [NSStringstringWithFormat:@"%ld小时前",(long)hours];    

                  }else if(day <30){

                    return [NSStringstringWithFormat:@"%ld天前",(long)day];    

                   }elseif(month <12){

                    NSDateFormatter* df =[[NSDateFormatter alloc]init];        

                     df.dateFormat =@"M月d日";

                    NSString* time = [df stringFromDate:lastDate];

                    return time;   

                   }else if(yers >=1){

                      NSDateFormatter* df =[[NSDateFormatter alloc]init];        

                      df.dateFormat =@"yyyy年M月d日";

                      NSString* time = [df stringFromDate:lastDate];

                       return time;    

                   }

       return  @"";

}

使用如下:

NSLog(@"\n\nresult: %@", [UtilitiestimeIntervalFromLastTime:@"2015年12月8日 15:50"lastTimeFormat:@"yyyy年MM月dd日 HH:mm"ToCurrentTime:@"2015/12/08 16:12"currentTimeFormat:@"yyyy/MM/dd HH:mm"]);

8. 判断手机号码格式是否正确

 + (BOOL)valiMobile:(NSString*)mobile{    

        mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""];

           if(mobile.length !=11)    

           {returnNO;    }

           else{

             /*** 移动号段正则表达式*/

          NSString*CM_NUM=@"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";

           /*** 联通号段正则表达式*/

         NSString*CU_NUM =@"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";

       /*** 电信号段正则表达式*/

        NSString*CT_NUM=@"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";

        NSPredicate*pred1 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",CM_NUM];

      BOOLisMatch1 = [pred1 evaluateWithObject:mobile];

        NSPredicate*pred2 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CU_NUM];

       BOOLisMatch2 = [pred2 evaluateWithObject:mobile];

       NSPredicate*pred3 = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",CT_NUM];

      BOOLisMatch3 = [pred3 evaluateWithObject:mobile];

      if(isMatch1 || isMatch2 || isMatch3) {returnYES;       

        }else{

              returnNO;       

         }    

      }

}

9.判断邮箱格式是否正确

+ (BOOL)isAvailableEmail:(NSString*)email {

        NSString*emailRegex =@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

       NSPredicate*emailTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", emailRegex];

       return[emailTest evaluateWithObject:email];

}

10. 将十六进制颜色转换为 UIColor 对象

+ (UIColor *)colorWithHexString:(NSString *)color{

NSString *cString = [[colorstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

// String should be 6 or 8 characters

if([cString length] <6) {

return[UIColor clearColor];

 }

// strip "0X" or "#" if it appears

if([cString hasPrefix:@"0X"]) {

cString = [cStringsubstringFromIndex:2];

 }  if([cString hasPrefix:@"#"]) {

cString = [cStringsubstringFromIndex:1];

 }   if([cString length] !=6){

return[UIColor clearColor];

}// Separate into r, g, b substrings

NSRange range;

range.location =0;

range.length =2;

//r

NSString *rString = [cString substringWithRange:range];

//g

range.location =2;

NSString *gString = [cString substringWithRange:range];

//b

range.location =4;

NSString *bString = [cString substringWithRange:range];

// Scan values

unsigned int r, g, b;

[[NSScannerscannerWithString:rString]scanHexInt:&r];

[[NSScannerscannerWithString:gString]scanHexInt:&g];

[[NSScannerscannerWithString:bString]scanHexInt:&b];

return[UIColorcolorWithRed:((float) r/ 255.0f) green:((float) g /255.0f)blue:((float) b /255.0f)alpha:1.0f];

}

11.创建一张实时模糊效果 View (毛玻璃效果)

//Avilable in iOS 8.0 and later

+ (UIVisualEffectView*)effectViewWithFrame:(CGRect)frame{

 UIBlurEffect*effect = [UIBlurEffecteffectWithStyle:UIBlurEffectStyleLight];

 UIVisualEffectView*effectView = [[UIVisualEffectView alloc] initWithEffect:effect];    

effectView.frame = frame;

 return effectView;

}

12. 截取一张 view 生成图片

+ (UIImage*)shotWithView:(UIView*)view{

    UIGraphicsBeginImageContext(view.bounds.size);   

 [view.layer renderInContext:UIGraphicsGetCurrentContext()];

 UIImage*image =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnimage;

}

13. 截取view中某个区域生成一张图片

+ (UIImage*)shotWithView:(UIView*)view scope:(CGRect)scope{

 CGImageRefimageRef=CGImageCreateWithImageInRect([selfshotWithView:view].CGImage,scope);

UIGraphicsBeginImageContext(scope.size);

CGContextRefcontext =UIGraphicsGetCurrentContext();

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

CGContextTranslateCTM(context,0, rect.size.height);

//下移CGContextScaleCTM(context,1.0f,-1.0f);

//上翻CGContextDrawImage(context, rect, imageRef);

UIImage*image=UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

CGImageRelease(imageRef);

CGContextRelease(context);

returnimage;

}

14. 压缩图片到指定尺寸大小

+ (UIImage *)compressOriginalImage:(UIImage *)imagetoSize:(CGSize)size{    

 UIImage *resultImage =image;    

UIGraphicsBeginImageContext(size);    

[resultImage drawInRect:CGRectMake(0,0,size.width,size.height)];   

 UIGraphicsEndImageContext();

return resultImage;

}

15.压缩图片到指定文件大小

+ (NSData*)compressOriginalImage:(UIImage*)image toMaxDataSizeKBytes:(CGFloat)size{

NSData*data =UIImageJPEGRepresentation(image,1.0);

CGFloatdataKBytes = data.length/1000.0;

CGFloatmaxQuality =0.9f;CGFloatlastData = dataKBytes;

while(dataKBytes > size && maxQuality >0.01f) {        

 maxQuality = maxQuality -0.01f;        

data =UIImageJPEGRepresentation(image, maxQuality);        

dataKBytes = data.length/1000.0;

if(lastData == dataKBytes) {

     break;        

}else{           

  lastData = dataKBytes;       

   }     

 }

returndata;

}

15. 获取设备 IP 地址

需要先引入下头文件:

#import <idaddrs.h>

#import <arpa/inet.h>

代码:

//获取设备 IP 地址

+ (NSString *)getIPAddress {    

NSString *address = @"error";

struct ifaddrs*interfaces = NULL;

struct ifaddrs*temp_addr = NULL;

 int success =0;    success = getifaddrs(&interfaces);

 if(success ==0) {       

    temp_addr = interfaces;

     while(temp_addr != NULL) {

         if(temp_addr->ifa_addr->sa_family == AF_INET) {

                 if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {                    

                  address = [NSString stringWithUTF8String:inet_ntoa(((structsockaddr_in*)temp_addr->ifa_addr)->sin_addr)];                

                 }            

         }            

      temp_addr = temp_addr->ifa_next;       

         }    

     }    

    freeifaddrs(interfaces);

   returnaddress;

}


16. 判断字符串中是否含有空格

+ (BOOL)isHaveSpaceInString:(NSString*)string{

 NSRange_range = [string rangeOfString:@" "];

   if(_range.location !=NSNotFound) {

     return YES;   

     }else{

   return NO;     

     }

}

17.判断字符串中是否含有某个字符串

+ (BOOL)isHaveString:(NSString*)string1 InString:(NSString*)string2{

       NSRange_range = [string2 rangeOfString:string1];

      if(_range.location !=NSNotFound) {

        return YES;   

       }else{

       return NO;    

      }

}

18.判断字符串中是否含有中文

+ (BOOL)isHaveChineseInString:(NSString*)string{

          for(NSIntegeri =0; i < [string length]; i++){

            int   a = [string characterAtIndex:i];

             if(a >0x4e00 && a <0x9fff) {

                 return YES;        

             }    

       }

return NO;

}

19.判断字符串是否全部为数字

+ (BOOL)isAllNum:(NSString*)string{

 unichar c

 ;for(inti=0; i<string.length ; i++) {

c=[string characterAtIndex:i];

if(!isdigit(c)) {

         return NO;        

    }

} return YES;}



20.将字典对象转换为 JSON 字符串

+ (NSString*)jsonPrettyStringEncoded:(NSArray*)array{

if([NSJSONSerializationisValidJSONObject:array]) {

NSError*error;

NSData*jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrintederror:&error];

if(!error) {

        NSString*json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

        returnjson;        

   }   

 }

returnnil;

}

21. 获取 WiFi 信息

引入头文件#import <SystemConfiguration/CaptiveNetwork.h>

代码:

- (NSDictionary*)fetchSSIDInfo {

 NSArray*ifs = (__bridge_transfer NSArray*)CNCopySupportedInterfaces();

   if(!ifs) {

      return nil;    

  }

NSDictionary*info =nil;

 for(NSString*ifnam    in   ifs) {        

      info = (__bridge_transferNSDictionary*)CNCopyCurrentNetworkInfo((__bridgeCFStringRef)ifnam);

       if(info && [info count]) {

        break; 

      }    

   }

returninfo;

}

30. 获取广播地址、本机地址、子网掩码、端口信息

需要引入头文件:

#import  <ifaddrs.h>

#import <arpa/inet.h>

//获取广播地址、本机地址、子网掩码、端口信息

- (NSMutableDictionary *)getLocalInfoForCurrentWiFi {   

 NSMutableDictionary *dict = [NSMutableDictionary dictionary];

structifaddrs*interfaces = NULL;

structifaddrs*temp_addr = NULL;

intsuccess =0;// retrieve the current interfaces - returns 0 on success

success = getifaddrs(&interfaces);

if(success ==0) {

// Loop through linked list of interfaces      

temp_addr = interfaces;

//*/

     while(temp_addr != NULL) {

          if(temp_addr->ifa_addr->sa_family == AF_INET) {

              // Check if interface is en0 which is the wifi connection on the iPhone

           if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {

            //广播地址

            NSString *broadcast = [NSString stringWithUTF8String:inet_ntoa(((structsockaddr_in*)temp_addr->ifa_dstaddr)->sin_addr)];

             if(broadcast) {                        

               [dict setObject:broadcast forKey:@"broadcast"];                    

            }//                    NSLog(@"broadcast address--%@",broadcast);

            //本机地址

            NSString *localIp = [NSString stringWithUTF8String:inet_ntoa(((structsockaddr_in*)temp_addr->ifa_addr)->sin_addr)];

           if(localIp) {                       

               [dict setObject:localIp forKey:@"localIp"];                    

             }//                    NSLog(@"local device ip--%@",localIp);

        //子网掩码地址

         NSString *netmask = [NSString stringWithUTF8String:inet_ntoa(((structsockaddr_in*)temp_addr->ifa_netmask)->sin_addr)];

            if(netmask) {                       

              [dict setObject:netmask forKey:@"netmask"];                    

          }//                    NSLog(@"netmask--%@",netmask);

         //--en0 端口地址

           NSString *interface = [NSString stringWithUTF8String:temp_addr->ifa_name];

          if(interface) {                        

           [dict setObject:interface forKey:@"interface"];                    

        }//                    NSLog(@"interface--%@",interface);returndict;                

      }            

    }           

  temp_addr = temp_addr->ifa_next;       

     }   

   }// Free memoryfreeifaddrs(interfaces);

returndict;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容