iOS常用公共方法
z133
8年前
<p><strong>1. 获取磁盘总空间大小</strong></p> <pre> <code class="language-objectivec">//磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error]; if (error) { #ifdef DEBUG NSLog(@"error: %@", error.localizedDescription); #endif }else{ NSNumber *number = [dic objectForKey:NSFileSystemSize]; size = [number floatValue]/1024/1024; } return size; }</code></pre> <p><strong>2. 获取磁盘可用空间大小</strong></p> <pre> <code class="language-objectivec">//磁盘可用空间 + (CGFloat)diskOfFreeSizeMBytes{ CGFloat size = 0.0; NSError *error; NSDictionary *dic = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error]; if (error) { #ifdef DEBUG NSLog(@"error: %@", error.localizedDescription); #endif }else{ NSNumber *number = [dic objectForKey:NSFileSystemFreeSize]; size = [number floatValue]/1024/1024; } return size; }</code></pre> <p><strong>3. 获取指定路径下某个文件的大小</strong></p> <pre> <code class="language-objectivec">//获取文件大小 + (long long)fileSizeAtPath:(NSString *)filePath{ NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:filePath]) return 0; return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize]; }</code></pre> <p><strong>4. 获取文件夹下所有文件的大小</strong></p> <pre> <code class="language-objectivec">//获取文件夹下所有文件的大小 + (long long)folderSizeAtPath:(NSString *)folderPath{ NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:folderPath]) return 0; NSEnumerator *filesEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator]; NSString *fileName; long long folerSize = 0; while ((fileName = [filesEnumerator nextObject]) != nil) { NSString *filePath = [folderPath stringByAppendingPathComponent:fileName]; folerSize += [self fileSizeAtPath:filePath]; } return folerSize; }</code></pre> <p><strong>5. 获取字符串(或汉字)首字母</strong></p> <pre> <code class="language-objectivec">//获取字符串(或汉字)首字母 + (NSString *)firstCharacterWithString:(NSString *)string{ NSMutableString *str = [NSMutableString stringWithString:string]; CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO); NSString *pingyin = [str capitalizedString]; return [pingyin substringToIndex:1]; }</code></pre> <p><strong>6. 将字符串数组按照元素首字母顺序进行排序分组</strong></p> <pre> <code class="language-objectivec">//将字符串数组按照元素首字母顺序进行排序分组 + (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array{ if (array.count == 0) { return nil; } for (id obj in array) { if (![obj isKindOfClass:[NSString class]]) { return nil; } } UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation]; NSMutableArray *objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count]; //创建27个分组数组 for (int i = 0; i < indexedCollation.sectionTitles.count; i++) { NSMutableArray *obj = [NSMutableArray array]; [objects addObject:obj]; } NSMutableArray *keys = [NSMutableArray arrayWithCapacity:objects.count]; //按字母顺序进行分组 NSInteger lastIndex = -1; for (int i = 0; i < array.count; i++) { NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)]; [[objects objectAtIndex:index] addObject:array[i]]; lastIndex = index; } //去掉空数组 for (int i = 0; i < objects.count; i++) { NSMutableArray *obj = objects[i]; if (obj.count == 0) { [objects removeObject:obj]; } } //获取索引字母 for (NSMutableArray *obj in objects) { NSString *str = obj[0]; NSString *key = [self firstCharacterWithString:str]; [keys addObject:key]; } NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setObject:objects forKey:keys]; return dic; } //获取字符串(或汉字)首字母 + (NSString *)firstCharacterWithString:(NSString *)string{ NSMutableString *str = [NSMutableString stringWithString:string]; CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO); NSString *pingyin = [str capitalizedString]; return [pingyin substringToIndex:1]; }</code></pre> <p>使用如下:</p> <pre> <code class="language-objectivec">NSArray *arr = @[@"guangzhou", @"shanghai", @"北京", @"henan", @"hainan"]; NSDictionary *dic = [Utilities dictionaryOrderByCharacterWithOriginalArray:arr]; NSLog(@"\n\ndic: %@", dic);</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/ebd753687a267a32765219c0bfd4a44b.png"></p> <p style="text-align:center">输出结果</p> <p><strong>7. 获取当前时间</strong></p> <pre> <code class="language-objectivec">//获取当前时间 //format: @"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH时mm分ss秒" + (NSString *)currentDateWithFormat:(NSString *)format{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:format]; return [dateFormatter stringFromDate:[NSDate date]]; }</code></pre> <p><strong>8. 计算上次日期距离现在多久, 如 xx 小时前、xx 分钟前等</strong></p> <pre> <code class="language-objectivec">/** * 计算上次日期距离现在多久 * * @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]]; //时间间隔 NSInteger intevalTime = [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; NSInteger yers = intevalTime / 60 / 60 / 24 / 365; if (minutes <= 10) { return @"刚刚"; }else if (minutes < 60){ return [NSString stringWithFormat: @"%ld分钟前",(long)minutes]; }else if (hours < 24){ return [NSString stringWithFormat: @"%ld小时前",(long)hours]; }else if (day < 30){ return [NSString stringWithFormat: @"%ld天前",(long)day]; }else if (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 @""; }</code></pre> <p>使用如下:</p> <pre> <code class="language-objectivec">NSLog(@"\n\nresult: %@", [Utilities timeIntervalFromLastTime:@"2015年12月8日 15:50" lastTimeFormat:@"yyyy年MM月dd日 HH:mm" ToCurrentTime:@"2015/12/08 16:12" currentTimeFormat:@"yyyy/MM/dd HH:mm"]);</code></pre> <p>输出结果如下:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/3b35cadd4b9e47c664154b3df1666efd.png"></p> <p style="text-align:center">输出结果</p> <p><strong>9. 判断手机号码格式是否正确</strong></p> <pre> <code class="language-objectivec">//判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile{ mobile = [mobile stringByReplacingOccurrencesOfString:@" " withString:@""]; if (mobile.length != 11) { return NO; }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 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM]; BOOL isMatch1 = [pred1 evaluateWithObject:mobile]; NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM]; BOOL isMatch2 = [pred2 evaluateWithObject:mobile]; NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM]; BOOL isMatch3 = [pred3 evaluateWithObject:mobile]; if (isMatch1 || isMatch2 || isMatch3) { return YES; }else{ return NO; } } }</code></pre> <p><strong>10. 判断邮箱格式是否正确</strong></p> <pre> <code class="language-objectivec">//利用正则表达式验证 + (BOOL)isAvailableEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:email]; }</code></pre> <p><strong>11. 将十六进制颜色转换为 UIColor 对象</strong></p> <pre> <code class="language-objectivec">//将十六进制颜色转换为 UIColor 对象 + (UIColor *)colorWithHexString:(NSString *)color{ NSString *cString = [[color stringByTrimmingCharactersInSet:[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 = [cString substringFromIndex:2]; if ([cString hasPrefix:@"#"]) cString = [cString substringFromIndex: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; [[NSScanner scannerWithString:rString] scanHexInt:&r]; [[NSScanner scannerWithString:gString] scanHexInt:&g]; [[NSScanner scannerWithString:bString] scanHexInt:&b]; return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f]; }</code></pre> <p><strong>12. 对图片进行滤镜处理</strong></p> <pre> <code class="language-objectivec">#pragma mark - 对图片进行滤镜处理 // 怀旧 --> CIPhotoEffectInstant 单色 --> CIPhotoEffectMono // 黑白 --> CIPhotoEffectNoir 褪色 --> CIPhotoEffectFade // 色调 --> CIPhotoEffectTonal 冲印 --> CIPhotoEffectProcess // 岁月 --> CIPhotoEffectTransfer 铬黄 --> CIPhotoEffectChrome // CILinearToSRGBToneCurve, CISRGBToneCurveToLinear, CIGaussianBlur, CIBoxBlur, CIDiscBlur, CISepiaTone, CIDepthOfField + (UIImage *)filterWithOriginalImage:(UIImage *)image filterName:(NSString *)name{ CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [[CIImage alloc] initWithImage:image]; CIFilter *filter = [CIFilter filterWithName:name]; [filter setValue:inputImage forKey:kCIInputImageKey]; CIImage *result = [filter valueForKey:kCIOutputImageKey]; CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; UIImage *resultImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); return resultImage; }</code></pre> <p><strong>13. 对图片进行模糊处理</strong></p> <pre> <code class="language-objectivec">#pragma mark - 对图片进行模糊处理 // CIGaussianBlur ---> 高斯模糊 // CIBoxBlur ---> 均值模糊(Available in iOS 9.0 and later) // CIDiscBlur ---> 环形卷积模糊(Available in iOS 9.0 and later) // CIMedianFilter ---> 中值模糊, 用于消除图像噪点, 无需设置radius(Available in iOS 9.0 and later) // CIMotionBlur ---> 运动模糊, 用于模拟相机移动拍摄时的扫尾效果(Available in iOS 9.0 and later) + (UIImage *)blurWithOriginalImage:(UIImage *)image blurName:(NSString *)name radius:(NSInteger)radius{ CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [[CIImage alloc] initWithImage:image]; CIFilter *filter; if (name.length != 0) { filter = [CIFilter filterWithName:name]; [filter setValue:inputImage forKey:kCIInputImageKey]; if (![name isEqualToString:@"CIMedianFilter"]) { [filter setValue:@(radius) forKey:@"inputRadius"]; } CIImage *result = [filter valueForKey:kCIOutputImageKey]; CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; UIImage *resultImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); return resultImage; }else{ return nil; } }</code></pre> <p><strong>14. 调整图片饱和度、亮度、对比度</strong></p> <pre> <code class="language-objectivec">/** * 调整图片饱和度, 亮度, 对比度 * * @param image 目标图片 * @param saturation 饱和度 * @param brightness 亮度: -1.0 ~ 1.0 * @param contrast 对比度 * */ + (UIImage *)colorControlsWithOriginalImage:(UIImage *)image saturation:(CGFloat)saturation brightness:(CGFloat)brightness contrast:(CGFloat)contrast{ CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage = [[CIImage alloc] initWithImage:image]; CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"]; [filter setValue:inputImage forKey:kCIInputImageKey]; [filter setValue:@(saturation) forKey:@"inputSaturation"]; [filter setValue:@(brightness) forKey:@"inputBrightness"]; [filter setValue:@(contrast) forKey:@"inputContrast"]; CIImage *result = [filter valueForKey:kCIOutputImageKey]; CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; UIImage *resultImage = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); return resultImage; }</code></pre> <p><strong>15. 创建一张实时模糊效果 View (毛玻璃效果)</strong></p> <pre> <code class="language-objectivec">//Avilable in iOS 8.0 and later + (UIVisualEffectView *)effectViewWithFrame:(CGRect)frame{ UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; effectView.frame = frame; return effectView; }</code></pre> <p><strong>16. 全屏截图</strong></p> <pre> <code class="language-objectivec">//全屏截图 + (UIImage *)shotScreen{ UIWindow *window = [UIApplication sharedApplication].keyWindow; UIGraphicsBeginImageContext(window.bounds.size); [window.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }</code></pre> <p><strong>17. 截取一张 view 生成图片</strong></p> <pre> <code class="language-objectivec">//截取view生成一张图片 + (UIImage *)shotWithView:(UIView *)view{ UIGraphicsBeginImageContext(view.bounds.size); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }</code></pre> <p><strong>18. 截取view中某个区域生成一张图片</strong></p> <pre> <code class="language-objectivec">//截取view中某个区域生成一张图片 + (UIImage *)shotWithView:(UIView *)view scope:(CGRect)scope{ CGImageRef imageRef = CGImageCreateWithImageInRect([self shotWithView:view].CGImage, scope); UIGraphicsBeginImageContext(scope.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGRect rect = 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); return image; }</code></pre> <p><strong>19. 压缩图片到指定尺寸大小</strong></p> <pre> <code class="language-objectivec">//压缩图片到指定尺寸大小 + (UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{ UIImage *resultImage = image; UIGraphicsBeginImageContext(size); [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIGraphicsEndImageContext(); return resultImage; }</code></pre> <p><strong>20. 压缩图片到指定文件大小</strong></p> <pre> <code class="language-objectivec">//压缩图片到指定文件大小 + (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size{ NSData *data = UIImageJPEGRepresentation(image, 1.0); CGFloat dataKBytes = data.length/1000.0; CGFloat maxQuality = 0.9f; CGFloat lastData = 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; } } return data; }</code></pre> <p><strong>21. 获取设备 IP 地址</strong></p> <p>需要先引入下头文件:</p> <pre> <code class="language-objectivec">#import <ifaddrs.h> #import <arpa/inet.h></code></pre> <p>代码:</p> <pre> <code class="language-objectivec">//获取设备 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(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; } } temp_addr = temp_addr->ifa_next; } } freeifaddrs(interfaces); return address; }</code></pre> <p><strong>22. 判断字符串中是否含有空格</strong></p> <pre> <code class="language-objectivec">+ (BOOL)isHaveSpaceInString:(NSString *)string{ NSRange _range = [string rangeOfString:@" "]; if (_range.location != NSNotFound) { return YES; }else { return NO; } }</code></pre> <p><strong>23. 判断字符串中是否含有某个字符串</strong></p> <pre> <code class="language-objectivec">+ (BOOL)isHaveString:(NSString *)string1 InString:(NSString *)string2{ NSRange _range = [string2 rangeOfString:string1]; if (_range.location != NSNotFound) { return YES; }else { return NO; } }</code></pre> <p><strong>24. 判断字符串中是否含有中文</strong></p> <pre> <code class="language-objectivec">+ (BOOL)isHaveChineseInString:(NSString *)string{ for(NSInteger i = 0; i < [string length]; i++){ int a = [string characterAtIndex:i]; if (a > 0x4e00 && a < 0x9fff) { return YES; } } return NO; }</code></pre> <p><strong>25. 判断字符串是否全部为数字</strong></p> <pre> <code class="language-objectivec">+ (BOOL)isAllNum:(NSString *)string{ unichar c; for (int i=0; i<string.length; i++) { c=[string characterAtIndex:i]; if (!isdigit(c)) { return NO; } } return YES; }</code></pre> <p><strong>26. 绘制虚线</strong></p> <pre> <code class="language-objectivec">/* ** lineFrame: 虚线的 frame ** length: 虚线中短线的宽度 ** spacing: 虚线中短线之间的间距 ** color: 虚线中短线的颜色 */ + (UIView *)createDashedLineWithFrame:(CGRect)lineFrame lineLength:(int)length lineSpacing:(int)spacing lineColor:(UIColor *)color{ UIView *dashedLine = [[UIView alloc] initWithFrame:lineFrame]; dashedLine.backgroundColor = [UIColor clearColor]; CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setBounds:dashedLine.bounds]; [shapeLayer setPosition:CGPointMake(CGRectGetWidth(dashedLine.frame) / 2, CGRectGetHeight(dashedLine.frame))]; [shapeLayer setFillColor:[UIColor clearColor].CGColor]; [shapeLayer setStrokeColor:color.CGColor]; [shapeLayer setLineWidth:CGRectGetHeight(dashedLine.frame)]; [shapeLayer setLineJoin:kCALineJoinRound]; [shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:length], [NSNumber numberWithInt:spacing], nil]]; CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 0, 0); CGPathAddLineToPoint(path, NULL, CGRectGetWidth(dashedLine.frame), 0); [shapeLayer setPath:path]; CGPathRelease(path); [dashedLine.layer addSublayer:shapeLayer]; return dashedLine; }</code></pre> <p><strong>27. 将字典对象转换为 JSON 字符串</strong></p> <pre> <code class="language-objectivec">+ (NSString *)jsonPrettyStringEncoded:(NSDictionary *)dictionary{ if ([NSJSONSerialization isValidJSONObject:dictionary ]) { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; if (!error) { NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; return json; } } return nil; }</code></pre> <p><strong>28.将数组对象转换为 JSON 字符串</strong></p> <pre> <code class="language-objectivec">+ (NSString *)jsonPrettyStringEncoded:(NSArray *)array{ if ([NSJSONSerialization isValidJSONObject:array]) { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error]; if (!error) { NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; return json; } } return nil; }</code></pre> <p><strong>29. 获取 WiFi 信息</strong></p> <p>需要引入头文件:</p> <pre> <code class="language-objectivec">#import <SystemConfiguration/CaptiveNetwork.h></code></pre> <p>代码:</p> <pre> <code class="language-objectivec">//获取 WiFi 信息 - (NSDictionary *)fetchSSIDInfo { NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces(); if (!ifs) { return nil; } NSDictionary *info = nil; for (NSString *ifnam in ifs) { info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); if (info && [info count]) { break; } } return info; }</code></pre> <p><strong>30. 获取广播地址、本机地址、子网掩码、端口信息</strong></p> <p>需要引入头文件:</p> <pre> <code class="language-objectivec">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ff4647}span.s1 {font-variant-ligatures: no-common-ligatures; color: #eb905a}span.s2 {font-variant-ligatures: no-common-ligatures} #import <ifaddrs.h> #import <arpa/inet.h></code></pre> <pre> <code class="language-objectivec">//获取广播地址、本机地址、子网掩码、端口信息 - (NSMutableDictionary *)getLocalInfoForCurrentWiFi { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 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(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)]; if (broadcast) { [dict setObject:broadcast forKey:@"broadcast"]; } // NSLog(@"broadcast address--%@",broadcast); //本机地址 NSString *localIp = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_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(((struct sockaddr_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); return dict; } } temp_addr = temp_addr->ifa_next; } } // Free memory freeifaddrs(interfaces); return dict; }</code></pre> <p>若还有其它常用的公共方法, 请与我联系, 我会在这里添加您提供的方法, 并注明提供者信息, 以便能够更好的分享给大家使用! 欢迎大家积极提供! 谢谢!</p> <p> </p> <p>来自:http://www.jianshu.com/p/997f96d2a0b5</p> <p> </p>