iOS常用公共方法

作者: jianshu_wl | 来源:发表于2016-05-26 14:16 被阅读8526次
    1. 获取磁盘总空间大小
    //磁盘总空间
    + (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;
    }
    
    2. 获取磁盘可用空间大小
    //磁盘可用空间
    + (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;
    }
    
    3. 获取指定路径下某个文件的大小
    //获取文件大小
    + (long long)fileSizeAtPath:(NSString *)filePath{
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if (![fileManager fileExistsAtPath:filePath]) return 0;
        return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
    }
    
    4. 获取文件夹下所有文件的大小
    //获取文件夹下所有文件的大小
    + (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;
    }
    
    5. 获取字符串(或汉字)首字母
    //获取字符串(�或汉字)首字母
    + (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];
    }
    
    6. 将字符串数组按照元素首字母顺序进行排序分组
    //将字符串数组按照元素首字母顺序进行排序分组
    + (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];
    }
    

    使用如下:

    NSArray *arr = @[@"guangzhou", @"shanghai", @"北京", @"henan", @"hainan"];
    NSDictionary *dic = [Utilities dictionaryOrderByCharacterWithOriginalArray:arr];
    NSLog(@"\n\ndic: %@", dic);
    

    输出结果如下:

    �输出结果
    7. 获取当前时间
    //获取当前时间
    //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]];
    }
    
    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]];
        //时间间隔
        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 @"";
    }
    
    

    使用如下:

    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"]);
    

    输出结果如下:

    输出结果
    9. 判断手机号码格式是否正确
    //判断手机号码格式是否正确
    + (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;
            }
        }
    }
    
    10. 判断邮箱格式是否正确
    //利用正则表达式验证
    + (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];
    }
    
    11. 将十六进制颜色转换为 UIColor 对象
    //将十六进制颜色转换为 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];
    }
    
    12. 对图片进行滤镜处理
    #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;
    }
    
    13. 对图片进行�模糊处理
    #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;
        }
    }
    
    14. 调整图片饱和度、亮度、对比度
    /**
     *  调整图片饱和度, 亮度, 对比度
     *
     *  @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;
    }
    
    15. 创建一张实时模糊效果 View (毛玻璃效果)
    //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;
    }
    
    16. 全屏截图
    //全屏截图
    + (UIImage *)shotScreen{
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        UIGraphicsBeginImageContext(window.bounds.size);
        [window.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    
    17. �截取�一张 view 生成图片
    //截取view生成一张图片
    + (UIImage *)shotWithView:(UIView *)view{
        UIGraphicsBeginImageContext(view.bounds.size);
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    
    18. 截取view中某个区域生成一张图片
    //截取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;
    }
    
    19. 压缩图片到指定尺寸大小
    //压缩图片到指定尺寸大小
    + (UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{
        UIImage *resultImage = image;
        UIGraphicsBeginImageContext(size);
        [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
        UIGraphicsEndImageContext();
        return resultImage;
    }
    
    20. 压缩图片到指定文件大小
    //压缩图片到指定文件大小
    + (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;
    }
    
    21. 获取设备 IP 地址

    需要先引入下头文件:

    #import <ifaddrs.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(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
        }
        freeifaddrs(interfaces);
        return address;
    }
    
    22. �判断字符串中是否含有空格
    + (BOOL)isHaveSpaceInString:(NSString *)string{
        NSRange _range = [string rangeOfString:@" "];
        if (_range.location != NSNotFound) {
            return YES;
        }else {
            return NO;
        }
    }
    
    23. �判断字符串中是否含有�某个字符串
    + (BOOL)isHaveString:(NSString *)string1 InString:(NSString *)string2{
        NSRange _range = [string2 rangeOfString:string1];
        if (_range.location != NSNotFound) {
            return YES;
        }else {
            return NO;
        }
    }
    
    24. �判断字符串中是否含有��中文
    + (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;
    }
    
    25. �判断字符串是否全部为数字
    + (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;
    }
    
    26. 绘制虚线
    /*
      ** 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;
    }
    
    27. 将字典对象转换为 JSON 字符串
    + (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;
    }
    
    28.将数组对象转换为 JSON 字符串
    + (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;
    }
    
    29. 获取 WiFi 信息

    需要引入头文件:

    #import <SystemConfiguration/CaptiveNetwork.h>
    

    代码:

    //获取 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;
    }
    
    30. 获取广播地址、本机地址、子网掩码、端口信息

    需要引入头文件:

    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>
    
    //获取广播地址、本机地址、子网掩码、端口信息
    - (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;
    }
    

    *若还有其它常用的公共方法, 请与我联系, 我会在这里添加您提供的方法, 并注明提供者信息, 以便能够更好的分享给大家使用! 欢迎大家积极提供! 谢谢! *

    相关文章

      网友评论

      本文标题:iOS常用公共方法

      本文链接:https://www.haomeiwen.com/subject/fseerttx.html