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