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