iOS常用公共方法

z133 5年前
   <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>