天天看点

Foundation杂类

1 . 自动释放池

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Student *s1 = [Student studentWithName:@"小明"];
[pool drain]; // 可以理解为相当于[pool release]
// [s1 release]; // Crash
           

2 . NSNumber

2 .1 int <–> NSNumber

int m = ;
NSNumber *number = [NSNumber numberWithInt:m];
int n = [number intValue]
           

2.2 判断number内容是否相同

if ([number isEqualTo:number2])
           

3 . NSValue

3.1 int <–> NSValue

int m = ;
/*
功能:创建NSValue对象
第一个参数:传要转化的数据类型空间的地址
第二个参数:类型字符串  需要用@encode(类型名)

NSValue *value = [[NSValue alloc] initWithBytes:&m objCType:@encode(int)];
*/
           
// NSValue -> int
int n = ;
[value getValue:&n];
NSLog(@"=======\\=%d", n); // 输出n为100
           

3.2 判断数据类型

NSLog(@"-------%s", value.objCType);

if (strcmp(value.objCType, @encode(int)) == )
           

3.3 系统定义的一些结构体 <–> NSValue

NSRect rect; // 矩形区域
//NSRect -> NSValue
value = [NSValue valueWithRect:rect];
           
// NSValue -> NSRect
NSRect rect2 = [value rectValue];
NSLog(@"%@", NSStringFromRect(rect2));
           

3.4 自定义结构体 <-> NSValue

// 自定义一个结构体'类型'
typedef struct _Range {
    NSInteger location;
    NSInteger length;
} MyRange;
           

由MyRange转化为nsvalue

MyRange range = ,};
 value = [NSValue valueWithBytes:&range objCType:@encode(MyRange)];
           

由nsvalue转化为MyRange

NSRange range2;
        [value getValue:&range2];
        NSLog(@"%ld, %ld", range2.location, range2.length);
           

4. NSSet

集合类的元素,可以是任意类型的对象地址,在存放集合元素的时候是没有相同的元素,如果出现相同的那么只会存一个

4.1 判断两个集合是否相同

[set isEqualToSet:set2]
           

4.2 判断一个集合是否是另一个集合的子集合

if ([set4 isSubsetOfSet:set]
           

4.3 根据一个数组创建一个新的集合

set = [NSSet setWithArray:array];
           

4.4 集合的联合 union

4.5 从集合移除在另一个集合中同样的对象

4.6 NSIndexSet

// 数字集合 /索引集合

NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndex:];

indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(, )];
NSLog(@"%lu", indexSet.count);//输出3
           

4.7 可变NSIndexSet

NSMutableIndexSet *mIndexSet = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(, )];
//添加
[mIndexSet addIndex:];
//移除所有
[mIndexSet removeAllIndexes];
           

4.8 数组在NSIndexSet中下标的元素

5. NSDate

1 . 获取当前日期时间

NSDate *date = [NSDate date];
NSLog(@"date: %@", date); // 2015-08-12 06:44:00 +0000 // GMT 格林尼治时间(0时区) 本初子午线在英国

// 北京东8时区 14:44    GMT(0时区)06:44
// 东8 - 0时区 = 8
           

2 .创建一个距离当前系统时间 10s之后的一个时间

NSDate *date2 = [date dateByAddingTimeInterval:]; // 当前时间+10s之后的时间

// 距离计算机元年 70s之后 的一个时间
date3 = [NSDate dateWithTimeIntervalSince1970:]; // 1970-01-01 00:01:10
           

3.现在距计算机元年,过去了多少秒

NSDate *nowDate = [NSDate date];
NSTimeInterval seconds = [nowDate timeIntervalSince1970];
NSLog(@"%lf", seconds); // 
           

4 . 计算两个date的时间间隔(时间差)

date3 = [nowDate dateByAddingTimeInterval:];
NSTimeInterval interval =  [date3 timeIntervalSinceDate:nowDate]; // 计算两个date的时间间隔(时间差)
NSLog(@"%lf", interval); // 60.000000
           

5 . 获取两个时间中较早/晚的一个时间

[date3 earlierDate:nowDate]

[nowDate laterDate:newDate]
           

6 . 比较两个时间是否相等

[nowDate isEqualToDate:newDate]
           

7 . 过去较远事件和将来较远时间

NSDate *future = [NSDate distantFuture];
        NSLog(@"%@", future); // 4001-01-01
        NSDate *past = [NSDate distantPast];
        NSLog(@"%@", past); // 0000-12-30 00:00:00 +0000
           

8 . NSTimerZone

计算本地时间

// 当前日期时间 GMT
NSDate *date = [NSDate date];
//获取当前系统的时区
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];  
// 算出当前系统时区和GMT时区的时间差(秒)
NSInteger seconds = [timeZone secondsFromGMTForDate:date];

// 推算出本地真正时间
date = [date dateByAddingTimeInterval:seconds];
           

9 . 13位的时间戳的解析

double timestampval =  [model.time doubleValue]/;
    NSTimeInterval timestamp = (NSTimeInterval)timestampval;

    NSDate *updatetimestamp = [NSDate dateWithTimeIntervalSince1970:timestamp];
    //格林威治时间,相差8个时区
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyy-MM-dd";
     NSString *time = [formatter stringFromDate:updatetimestamp];
           

6.NSDateFormatter

/*
yyyy 设置年4位
MM   月
dd   天

hh 12进制小时
mm  分钟
ss  秒

HH 24进制

EEEE 星期几
*/
           

1 .日期时间格式器 格式化对象

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss EEEE";
// formatter.timeZone
// 2015年08月12日 15:59:58 星期三
           

2 . Date -> string

NSDate *date = [NSDate date];

NSString *str = [formatter stringFromDate:date];
// formatter负责转换date -> string 其中formatter知道以什么格式去转换
           

3 . String -> Date

// 字符串转NSDate要小心:必须要和时间格式一致
str = @"2015年08月12日 15:59:58 星期三";
formatter.dateFormat = @"yyyy年MM月dd日 HH:mm:ss EEEE";
date = [formatter dateFromString:str];
           

7. NSTimer

//

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
           
// 定时器对象
    // 第一个参数:每隔多少时间触发一次
    // 第二个参数:target
    // 第三个参数:方法,定时器每隔一段时间触发target的这个方法
    // 每四个参数:附加信息
    // 最后一个参数:是否重复(如果写为1,则定时器只会触发一次)
    self.timer = [NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(doFuWoCheng) userInfo:nil repeats:YES];
           

8 . 单例

单例是一种设计模式,在程序运行期间,只有一个实例

单例一般声明方法

// shared…

// default…

// single…

// current..

//示例

static Teacher *_t = nil;

+ (Teacher *)sharedTeacher {
    @synchronized(self) { //如果有多个线程进行操作那么这些线程会排队一个一个进行 同步  考虑线程安全
        if (_t == nil) {
            _t = [[Teacher alloc] init];
            _t.name = @"小刘";
        }
    }
    return _t;
}
           

9 . NSData

// 二进制数据 data对象

// NSMutableData

NSString <–> NSData