IOS开发常用的函数总结

[TOC]

1.按照指定格式获取日期

//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd-HH-mm"];
//用[NSDate date]可以获取系统当前时间
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];

2.获取沙盒目录结构

应用程序的沙盒目录下拥有三个很特殊的文件夹分别是Documents、Library(拥有Caches和Preferences目录)、tmp。

Documents:保存应用程序运行时生成的需要持久化数据,iTunes会自动备份该目录
苹果公司建议将程序中建立的活在程序浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该文件目录

  1. Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出时删除,通常存放体积比较大,但并不是很重要的资源
  2. Library/Preferences:保存应用的所有偏好设置,iOS的Setting(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。——PS:如果你想对偏好设置进行相应的操作,应该使用NSUserDefaults类来取得和设置应用程序的偏好,而不是直接创建偏好设置文件。

tmp:保存应用程序运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除,应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录,你的iPhone重启时,该目录下的文件会被删除

// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 获取tmp目录路径
NSString *tmpDir =  NSTemporaryDirectory();

3.获取时间差

第一种方法:

NSDate *start = [NSDate date];
NSDate *end = [NSDate date];
NSTimeInterval cost = [end timeIntervalSinceDate:start];//单位s

第二种方法:

#import 
uint64_t start = mach_absolute_time();
sleep(1);
uint64_t end = mach_absolute_time();

static int timeSubtract(uint64_t start, uint64_t end) {
    uint64_t elapsed = end - start;
    mach_timebase_info_data_t info;
    mach_timebase_info(&info);
    uint64_t nanos = elapsed * info.numer / info.denom;
    int msecs = (int)(nanos*1000/NSEC_PER_SEC);
    return msecs;
}

第三种方法:

- (long long) currentSystime {
    NSTimeInterval nowTimeMs = [[NSDate date] timeIntervalSince1970] *1000;
    return [[NSNumber numberWithDouble:nowTimeMs] longLongValue];
}

3.IOS常用宏定义

3.1获取屏幕宽度

//不考虑横屏模式
# define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
# define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
//支持横屏模式下
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上
#define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)
#define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)
#define SCREEN_SIZE ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale):[UIScreen mainScreen].bounds.size)
#else
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height
#define SCREEN_SIZE [UIScreen mainScreen].bounds.size
#endif

4. iOS获取Local DNS server的ip

#include 
#include 
#include 
#include 

- (NSString *) getDNSServers
{
    // dont forget to link libresolv.lib
    NSMutableString *addresses = [[NSMutableString alloc]initWithString:@"DNS Addresses \n"];

    res_state res = malloc(sizeof(struct __res_state));

    int result = res_ninit(res);

    if ( result == 0 )
    {
        for ( int i = 0; i < res->nscount; i++ )
        {
            NSString *s = [NSString stringWithUTF8String :  inet_ntoa(res->nsaddr_list[i].sin_addr)];
            [addresses appendFormat:@"%@\n",s];
            NSLog(@"%@",s);
        }
    }
    else
        [addresses appendString:@" res_init result != 0"];

    return addresses;
}

5. iOS 日志打印调用函数的堆栈情况

    NSLog(@"%s,%@",__FUNCTION__,[NSThread callStackSymbols]);

6. iOS 忽略warning的方法

对单个文件进行
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
// 写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告
#pragma clang diagnostic pop

你可能感兴趣的:(IOS开发常用的函数总结)