美文网首页
iOS开发常用方法

iOS开发常用方法

作者: _小圆球_ | 来源:发表于2018-05-11 15:49 被阅读10次
    • 获取本地化语言
    NSString *language = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0]; 
    
    • MD5
    #import <CommonCrypto/CommonDigest.h>
    - (NSString *)md5
    {
        const char *cStr = [self UTF8String];
        unsigned char result[16];
        CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
        return [NSString stringWithFormat:
               @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                result[0], result[1], result[2], result[3], 
                result[4], result[5], result[6], result[7],
                result[8], result[9], result[10], result[11],
                result[12], result[13], result[14], result[15]
        ];
    }
    
    • 获取mac地址
    - (NSString *)getMacAddress {
        int mib[6];
        size_t len;
        char *buf;
        unsigned char *ptr;
        struct if_msghdr *ifm;
        struct sockaddr_dl *sdl;
    
        mib[0] = CTL_NET;
        mib[1] = AF_ROUTE;
        mib[2] = 0;
        mib[3] = AF_LINK;
        mib[4] = NET_RT_IFLIST;
    
        if ((mib[5] = if_nametoindex("en0")) == 0) {
            printf("Error: if_nametoindex error/n");
            return NULL;
        }
    
        if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
            printf("Error: sysctl, take 1/n");
            return NULL;
        }
    
        if ((buf = malloc(len)) == NULL) {
            printf("Could not allocate memory. error!/n");
            return NULL;
        }
    
        if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
            free(buf);
            printf("Error: sysctl, take 2");
            return NULL;
        }
    
        ifm = (struct if_msghdr *)buf;
        sdl = (struct sockaddr_dl *)(ifm + 1);
        ptr = (unsigned char *)LLADDR(sdl);
    
        // MAC地址带冒号
        // NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2),
        // *(ptr+3), *(ptr+4), *(ptr+5)];
    
        // MAC地址不带冒号
        NSString *outstring = [NSString
            stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4), *(ptr + 5)];
    
        free(buf);
    
        return [outstring uppercaseString];
    }
    
    • 获取时间差
    + (NSString *) getTimeDiffString:(NSTimeInterval) timestamp  
    {  
      
        NSCalendar *cal = [NSCalendar currentCalendar];  
        NSDate *todate = [NSDate dateWithTimeIntervalSince1970:timestamp];  
        NSDate *today = [NSDate date];//当前时间  
        unsigned int unitFlag = NSDayCalendarUnit | NSHourCalendarUnit |NSMinuteCalendarUnit;  
        NSDateComponents *gap = [cal components:unitFlag fromDate:today toDate:todate options:0];//计算时间差  
         
        if (ABS([gap day]) > 0)  
        {  
            return [NSString stringWithFormat:@"%d天前", ABS([gap day])];  
        }else if(ABS([gap hour]) > 0)  
        {  
            return [NSString stringWithFormat:@"%d小时前", ABS([gap hour])];  
        }else   
        {  
            return [NSString stringWithFormat:@"%d分钟前",  ABS([gap minute])];  
        }  
    }  
    
    • 计算字符串中单词的个数
    + (int)stringWordsCount:(NSString*)s  
    {  
        int i,n=[s length],l=0,a=0,b=0;  
        unichar c;  
        for(i=0;i<n;i++){  
            c=[s characterAtIndex:i];  
            if(isblank(c))  
            {  
                b++;  
            }else if(isascii(c))  
            {  
                a++;  
            }else  
            {  
                l++;  
            }  
        }  
        if(a==0 && l==0)  
        {  
            return 0;  
        }  
        return l+(int)ceilf((float)(a+b)/2.0);  
    }  
    
    • 屏幕截图并保存到相册
    + (UIImage*)saveImageFromView:(UIView*)view  
    {  
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, view.layer.contentsScale);  
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];  
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();  
        UIGraphicsEndImageContext();  
        return image;  
    }  
      
    + (void)savePhotosAlbum:(UIImage *)image  
    {  
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);   
    }  
      
    + (void)saveImageFromToPhotosAlbum:(UIView*)view  
    {  
        UIImage *image = [self saveImageFromView:view];  
        [self savePhotosAlbum:image];  
    }  
      
    - (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *) contextInfo  
    {  
        NSString *message;  
        NSString *title;  
        if (!error) {  
            title = @"成功提示";  
            message = @"成功保存到相";  
        } else {  
            title = @"失败提示";  
            message = [error description];  
        }  
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title  
                                                        message:message  
                                                       delegate:nil  
                                              cancelButtonTitle:@"知道了"  
                                              otherButtonTitles:nil];  
        [alert show];  
        [alert release];  
    }  
    
    • 获取本月,本周,本季度第一天的时间戳
    + (unsigned long long)getFirstDayOfWeek:(unsigned long long)timestamp  
    {  
        NSDate *now = [NSDate dateWithTimeIntervalSince1970:timestamp];  
        NSCalendar *cal = [NSCalendar currentCalendar];  
        NSDateComponents *comps = [cal  
                                   components:NSYearCalendarUnit| NSMonthCalendarUnit| NSWeekCalendarUnit | NSWeekdayCalendarUnit |NSWeekdayOrdinalCalendarUnit  
                                   fromDate:now];  
        if (comps.weekday <2)  
        {  
            comps.week = comps.week-1;  
        }  
        comps.weekday = 2;  
        NSDate *firstDay = [cal dateFromComponents:comps];  
        return [firstDay timeIntervalSince1970];  
    }  
      
    + (unsigned long long)getFirstDayOfQuarter:(unsigned long long)timestamp  
    {  
        NSDate *now = [NSDate dateWithTimeIntervalSince1970:timestamp];  
        NSCalendar *cal = [NSCalendar currentCalendar];  
        NSDateComponents *comps = [cal  
                                   components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit  
                                   fromDate:now];  
        if (comps.month <=3)  
        {  
            comps.month =  1;  
        }  
        else if(comps.month<=6)  
        {  
            comps.month =  4;  
        }  
        else if(comps.month<=9)  
        {  
            comps.month =  7;  
        }  
        else if(comps.month<=12)  
        {  
            comps.month =  10;  
        }  
              
        comps.day = 1;  
        NSDate *firstDay = [cal dateFromComponents:comps];  
        return [firstDay timeIntervalSince1970]*1000;  
    }  
      
    + (unsigned long long)getFirstDayOfMonth:(unsigned long long)timestamp  
    {  
        NSDate *now = [NSDate dateWithTimeIntervalSince1970:timestamp/1000];  
        NSCalendar *cal = [NSCalendar currentCalendar];  
        NSDateComponents *comps = [cal  
                                   components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit  
                                   fromDate:now];  
        comps.day = 1;  
        NSDate *firstDay = [cal dateFromComponents:comps];  
        return [firstDay timeIntervalSince1970]*1000;  
    }  
    
    • 判断是否越狱
    static const char * __jb_app = NULL;  
      
    + (BOOL)isJailBroken  
    {  
        static const char * __jb_apps[] =  
        {  
            "/Application/Cydia.app",   
            "/Application/limera1n.app",   
            "/Application/greenpois0n.app",   
            "/Application/blackra1n.app",  
            "/Application/blacksn0w.app",  
            "/Application/redsn0w.app",  
            NULL  
        };  
      
        __jb_app = NULL;  
      
        // method 1  
        for ( int i = 0; __jb_apps[i]; ++i )  
        {  
            if ( [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:__jb_apps[i]]] )  
            {  
                __jb_app = __jb_apps[i];  
                return YES;  
            }  
        }  
          
        // method 2  
        if ( [[NSFileManager defaultManager] fileExistsAtPath:@"/private/var/lib/apt/"] )  
        {  
            return YES;  
        }  
          
        // method 3  
        if ( 0 == system("ls") )  
        {  
            return YES;  
        }  
          
        return NO;    
    }  
      
    + (NSString *)jailBreaker  
    {  
        if ( __jb_app )  
        {  
            return [NSString stringWithUTF8String:__jb_app];  
        }  
        else  
        {  
            return @"";  
        }  
    }  
    
    • 定义单例的宏
    #undef  AS_SINGLETON  
    #define AS_SINGLETON( __class ) \  
            + (__class *)sharedInstance;  
      
    #undef  DEF_SINGLETON  
    #define DEF_SINGLETON( __class ) \  
            + (__class *)sharedInstance \  
            { \  
                static dispatch_once_t once; \  
                static __class * __singleton__; \  
                dispatch_once( &once, ^{ __singleton__ = [[__class alloc] init]; } ); \  
                return __singleton__; \  
            }  
    
    • 网络状态检测
    - (void)reachabilityChanged:(NSNotification *)note {  
        Reachability* curReach = [note object];  
        NSParameterAssert([curReach isKindOfClass: [Reachability class]]);  
        NetworkStatus status = [curReach currentReachabilityStatus];  
          
        if (status == NotReachable)  
        {  
              
        }  
        else if(status == kReachableViaWiFi)  
        {  
              
        }  
        else if(status == kReachableViaWWAN)  
        {  
              
        }  
          
    }  
      
    - (void)setNetworkNotification  
    {  
        [[NSNotificationCenter defaultCenter] addObserver:self  
                                                 selector:@selector(reachabilityChanged:)  
                                                     name: kReachabilityChangedNotification  
                                                   object: nil];  
        _hostReach = [[Reachability reachabilityWithHostName:@"http://www.baidu.com"] retain];  
        [_hostReach startNotifier];  
    }
    
    • 添加推送消息
    - (void)setPushNotification  
    {  
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];  
    }  
      
      
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  
        NSLog(@"获取设备的deviceToken: %@", deviceToken);  
    }  
      
    - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error{  
          
        NSLog(@"Failed to get token, error: %@", error);  
    }  
    
    • 16进制颜色转UIColor
    + (UIColor *)colorWithHex:(NSString *)hex {  
        // Remove `#` and `0x`  
        if ([hex hasPrefix:@"#"]) {  
            hex = [hex substringFromIndex:1];  
        } else if ([hex hasPrefix:@"0x"]) {  
            hex = [hex substringFromIndex:2];  
        }  
      
        // Invalid if not 3, 6, or 8 characters  
        NSUInteger length = [hex length];  
        if (length != 3 && length != 6 && length != 8) {  
            return nil;  
        }  
      
        // Make the string 8 characters long for easier parsing  
        if (length == 3) {  
            NSString *r = [hex substringWithRange:NSMakeRange(0, 1)];  
            NSString *g = [hex substringWithRange:NSMakeRange(1, 1)];  
            NSString *b = [hex substringWithRange:NSMakeRange(2, 1)];  
            hex = [NSString stringWithFormat:@"%@%@%@%@%@%@ff",  
                   r, r, g, g, b, b];  
        } else if (length == 6) {  
            hex = [hex stringByAppendingString:@"ff"];  
        }  
      
        CGFloat red = [[hex substringWithRange:NSMakeRange(0, 2)] _hexValue] / 255.0f;  
        CGFloat green = [[hex substringWithRange:NSMakeRange(2, 2)] _hexValue] / 255.0f;  
        CGFloat blue = [[hex substringWithRange:NSMakeRange(4, 2)] _hexValue] / 255.0f;  
        CGFloat alpha = [[hex substringWithRange:NSMakeRange(6, 2)] _hexValue] / 255.0f;  
      
        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];  
    }  
    

    相关文章

      网友评论

          本文标题:iOS开发常用方法

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