五、类目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);
时间: 2024-11-25 21:17:26