Object-C学习(八)——Foundation框架(四)

五、类目Category

a、  类目的定义和类的定义相似。在.h文件里声明,.m文件里实现方法。

b、  定义类目的文件命名规则:类名+类目名称,如 “NSString + Revert”。

@interface NSString (Extension)

-(BOOL)validateEmail;

@end
@implemention NSString (Extension)

- (BOOL)validateEmail{
  //实现方法
}

类名的局限性

         类目还可以覆写现有类的方法。覆写后,原始方法则无法调用。

         类目不能为类扩展实例属性。

//声明类目
@interface NSString (Extension)

//覆写方法
- (int)intValue;

@end

六、  数字对象的常用处理方法

NSNumber

//创建NSNumber(包装基本数据类型)——包装
NSNumber *intNumber = [NSNumber numberWithInt:100];
NSNumber *floatNumber = [NSNumber numberWithFloat:200];
NSNumber *longNumber = [NSNumber numberWithLong:125125325];
NSNumber *boolNumber = [NSNumber numberWithBool:YES];

NSArray *array = @[ intNumber, floatNumber, longNumber, boolNumber];
NSLog(@” array = %@”,array);

//解包
int intvalue = [intNumber intValue];
float floatvalue = [floatNumber floatValue];
long longvalue = [longNumber longValue];
bool boolvalue = [boolNumber boolValue];

//NSNumber 优化的语法
NSNumber *intNumber1 = @12;//等价于 [NSNumber numberWithInt:100]
NSNumber *floatNumber1 = @2.32f;
NSNumber *longNumber1 = @34903521123;
NSNumber *boolNumber1 = @YES;
NSNumber *charNumber1 = @’s’;

NSValue——可以对结构体进行包装,NSValue是NSNumber的父类

NSRange rang = {10,20}
//封包
NSValue *rangValue = [NSValue valueWithRange:rang];

//解包
NSRange rang2 = [rangValue rangeValue];
NSLog(@” (%ld,%ld)”,rang2.location,rang2.lenght);

//对自定义的结构体进行封包
struct WXPoint{
  float x;
  float y;
}

struct WXPoint p = {50,100};
NSValue *pointValue = [NSValue value:&p withObjCType:@encode(struct WXPoint)];

//对自定义的结构体进行解包
struct WXPoint p2;
[pointValue getValue:&p2];
NSLong(@”p2.x=%f,p2.y=%f”, p2.x,p2.y);

NSNULL的使用

NSArray *nilarray = @[nil,nil,nil];//错误,nil不能够存入到数组或字典中

NSNull *n1 = [NSNull null];
NSNull *n2 = [NSNull null];
NSArray *nullarray = @[@”zhangsan”,n2];
NSLog(@”nullarray = %@” ,nullarray);

for (id item in nullarray){
  if(item == [NSNull]){
    NSLog(@”此位置是为空的元素”);
}
}

日期类NSDate

//创建日期

NSDate *date1 = [NSDate date];
NSDate *date2 = [[NSDate alloc] init];
NSLog(@”date2:%@”,date2);

//在当前时间点的基础上累加一个数值之后的日期,单位是秒
NSDate *date3 = [NSDate dateWithTimeIntervalSinceNow:24*60*60]; 
NSLog(@”date3:%@”,date3);

NSDate *date4 = [NSDate dateWithTimeIntervalSinceNow:-24*60*60]; 
NSLog(@”date4:%@”,date4);

//时间戳:某一日期到1970年的秒数大小,称为该日期的时间戳。
NSDate *date1970 = [NSDate dateWithTimeTntervalSince1970:0];
NSLog(@”date1970:%@”,date1970); 

NSDate *time = [NSDate dateWithTimeTntervalSince1970:11025412687];
NSLog(@” time:%@”, time);

//获取日期的时间戳
NSDate *timeNow = [NSDate date];
NSTimeInterval time1970 = [timeNow timeIntervalSince1970]
NSLog(@”time1970=%lf”,time1970);

//日期的比较
//1,通过调用日期对象的compare方法进行比较
NSComparisonResult result = [date3 compare:date2];
if (result == NSOrderedAscending) {
  NSLog(@”date3 > date2”);
}else {
  NSLog(@”date3 < date2”);
}

//2.通过比较时间戳
if ([date3 timeIntervalSince1970] > [date2 timeIntervalSince1970]) {
  NSLog(@”date3 > date2”);
} else {
  NSLog(@”date3 < date2”);
}

 日期格式化类NSDateFormatter

//日期对象 - 字符串

NSDate *nowDate = [NSDate date];
NSString *timestr = nowDate.description;
NSLog(@”%@”,timestr);

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
//设置日期格式
[dateFormatter setDateFormat:@”yyyy年MM月dd日 HH时mm分ss秒”];
NSString *dateString = [dateFormatter stringFromDate:nowDate];
NSLog(@”当前时间:%@”,dateString);

//设置时区
NSTimeZon *time = [NSTimeZone timeZoneWithName:@”America/New_York”];
//将时区配置给dateFormatter对象
[dateFormatter setTimeZone:timezone];

NSString *datestring2 = [dateFormatter stringFromDate:nowDate];
NSLog(@”格式化后2:%@”,datestring2);


//字符串--日期对象
NSString *str = @”2015年03月22日 17:06:22”;

NSDateFormatter * dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@”yyyy年MM月dd日 HH时mm分ss秒”];
NSDate *date11 = [dateFormatter2 dateFromString:str]
NSLog(@”%@”,date11);

 

posted @ 2015-08-14 11:24  Mas丶Driver  阅读(144)  评论(0编辑  收藏  举报