1.NSDate(拿到零时区时间)
NSDate *date1 = [NSDate date];
2.NSTimZone(拿到本时区)
NSTimeZone *zone = [[NSTimeZone alloc]init];
zone = [NSTimeZone localTimeZone];
3.NSTimeInterval
NSInteger offset = [zone secondsFromGMT];// 计算时差
NSDate *date2 = [[NSDate date] initWithTimeIntervalSinceNow:offset];// 本时区的时间
NSTimeInterval time1 = [[NSDate date] timeIntervalSinceDate:date2];// 计算时间差
4.NSDateFormatter( ios 开发中的日期时间格式 用来实现字符串和日期之间的转换)
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
[formatter1 setDateFormat:@"yyyy年MM月dd日HH时mm分ss秒"];
NSString *s = [formatter1 stringFromDate:[NSDate date]];
NSLog(@"%@",s);// 通过字符串获得日期
NSDate *dat = [formatter1 dateFromString:s];
NSLog(@"%@",dat);
注意:时间格式根据需求去修改([formatter1 setDateFormat:@"HH;mm"];// 微信)
5.练习
1⃣️练习一
NSDate *date3 = [NSDate date];
NSTimeZone *zone2 = [[NSTimeZone alloc]init];
zone2 = [NSTimeZone localTimeZone];
NSInteger offset2 = [zone2 secondsFromGMT];
NSDate *nowDate = [date3 initWithTimeIntervalSinceNow:offset2];
NSDate *fixedDate = [nowDate dateByAddingTimeInterval:360000];
NSTimeInterval time11 = [date3 timeIntervalSinceDate:fixedDate];
double time22 = fabs(time11);
if (time22 < 60)
{
NSLog(@"刚刚");
}
else if ((time22 > 3600) && (time22 < 3600*24))
{
double minutes = time22 / 60;
NSLog(@"%f分钟前",minutes);
}
else if (time22 >3600*24)
{
double hours = time22 /3600;
NSLog(@"%f小时前",hours);
}
2⃣️练习二
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒 "];
NSDate *ss = [dateFormatter dateFromString:@"2014年05月01日 18时23分18秒"];
NSLog(@"%@",ss);
重点:
类目(category),延展(Extension),协议(Protocol),代理(delegate)-委托
一
category:类目是给没有源代码的类添加属性的方法,类目添加出来的文件 类名+方法名 创建出来是一对.h和.m文件
.h文件
- (void)qxq_sayHi;
+ (void)vip_eat;
.m文件
+ (void)vip_eat{
NSLog(@"takaqinojia!!");
}
- (void)qxq_sayHi{
NSLog(@"takaqinojia!!");
}
- (void)qxq_sayHi{
NSLog(@"boomshakalaka!!!");
main.m
NSString *s1 = @"权志龙";
[s1 qxq_sayHi];
[s1 qxq_sayHi];
[NSString vip_eat];
}
二
Extension:延展是用来管理私有变量和私有方法的,延展通常直接在该类的.m文件中直接声明即可,格式:@interface + 类名 ,原来的类方法可以直接调用,延展中的私有方法类外无法访问,延展是封装特性的的体现
.h文件
@interface Person : NSObject{
NSString *_Name;
}
}
- (void)eat;
@end
.m文件
@interface Person (){
NSInteger _age;
}
NSInteger _age;
}
- (void)drink;// 方法只写声明
@end
@implementation Person
- (void)eat{
NSLog(@"eat too much!!");
}
- (void)drink{
NSLog(@"drink too much!!");
}
- (void)eat{
NSLog(@"eat too much!!");
}
- (void)drink{
NSLog(@"drink too much!!");
}
@end
main.m
Person *p1 = [[Person alloc]init];
[p1 eat];
三
Protocol:
Protocol.h文件
@protocol MyProtocol
// 如果只有.h文件 而且里面有Protocol这样的关键字,这是一个协议
// 协议里面都是方法的声明
@required// 要求的 方法需要在遵循协议的类的.m文件中实现,否则会有警告 如果不写关键字 默认在协议里的方法都是需要实现的
- (void)eat;
- (void)drink;
@optional // 可以实现的 使用@optional关键字修饰的方法 可以不实现
- (void)think;
// 协议里面都是方法的声明
@required// 要求的 方法需要在遵循协议的类的.m文件中实现,否则会有警告 如果不写关键字 默认在协议里的方法都是需要实现的
- (void)eat;
- (void)drink;
@optional // 可以实现的 使用@optional关键字修饰的方法 可以不实现
- (void)think;
@end
.h文件
#import
#import "MyProtocol.h"
@interface Person : NSObject
// 遵循协议 首先引入 然后再类名后+<协议名>
#import "MyProtocol.h"
@interface Person : NSObject
// 遵循协议 首先引入 然后再类名后+<协议名>
@end
.m文件
@implementation Person
- (void)eat{
NSLog(@"eat too much!!");
}
- (void)drink{
NSLog(@"drink too lot!!");
}
- (void)think{
NSLog(@"think too long!!");
}
- (void)eat{
NSLog(@"eat too much!!");
}
- (void)drink{
NSLog(@"drink too lot!!");
}
- (void)think{
NSLog(@"think too long!!");
}
@end
main.m
Protocol 协议
// 协议只有.h文件里面写方法的声明
// 遵循协议的对象需要事先协议里的方法
四
delegate: 代理就是某个功能,某个类不想自己去实现,找个别的类去实现,这时候需要先定义一个协议,符合协议的类就可以作为代理,实现这个功能
步骤:
// 1 创建一个协议
// 2 有一个类 里面有一个代理的实例变量 还想让代理实现自己的需求
// 3 另外一个类协议并实现方法
// 4 设置代理
// 5 完成需求
协议.h文件
// 协议是来写一堆方法和声明的
- (void)cook;
- (void)makeMoney;
- (void)cook;
- (void)makeMoney;
- (void)programming;
需求类.h
#import
#import "BFProtocol.h"
@interface Girl : NSObject //
#import "BFProtocol.h"
@interface Girl : NSObject //
{
id_delegate;
}
- (void)setDelegate:(id)delegate;
- (void)hungry;
- (void)spendMoney;
- (void)play;
- (void)setDelegate:(id
- (void)hungry;
- (void)spendMoney;
- (void)play;
@end
需求类.m
#import "Girl.h"
@implementation Girl
- (void)setDelegate:(id)delegate{
_delegate = delegate;
}
- (void)hungry{
[_delegate cook];
}
- (void)spendMoney{
[_delegate makeMoney];
}
- (void)play{
[_delegate programming];
}
@implementation Girl
- (void)setDelegate:(id
_delegate = delegate;
}
- (void)hungry{
[_delegate cook];
}
- (void)spendMoney{
[_delegate makeMoney];
}
- (void)play{
[_delegate programming];
}
@end
代理类.h
#import
#import "BFProtocol.h"
@interface Boy : NSObject
// 遵循协议
#import "BFProtocol.h"
@interface Boy : NSObject
// 遵循协议
@end
代理类.m
#import "Boy.h"
@implementation Boy
- (void)cook{
NSLog(@"cook eat");
}
- (void)makeMoney{
NSLog(@"随便刷!!");
}
- (void)programming{
NSLog(@"女神!这是我给你写的程序,随便用!没bug!");
}
@implementation Boy
- (void)cook{
NSLog(@"cook eat");
}
- (void)makeMoney{
NSLog(@"随便刷!!");
}
- (void)programming{
NSLog(@"女神!这是我给你写的程序,随便用!没bug!");
}
@end
main.m
#import
#import "Girl.h"
#import "Boy.h"
#import "Girl.h"
#import "Boy.h"
int main(int argc, const char * argv[]) {
Girl *g1 = [[Girl alloc]init];
Boy *b1 = [[Boy alloc]init];
[g1 setDelegate:b1];
[g1 hungry];
[g1 play];
Boy *b1 = [[Boy alloc]init];
[g1 setDelegate:b1];
[g1 hungry];
[g1 play];
[g1 spendMoney];