//
// main.m
// NSNumber
//
// Created by LiuWei on 15/4/19.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
// NSNumber
void number();
// NSValue
void value();
// NSNull
void nsnull();
// NSDate
void usagesOfDate();
int main()
{
@autoreleasepool
{
// number();
// value();
// nsnull();
usagesOfDate();
}
return 0;
}
#pragma mark - NSNumber
void number()
{
// NSNumber 可以将基本数据类型包装成对象这样就可以间接将基本数据类型放到 NSArray, NSDictionary等集合中去
// 不能包装结构体
// NSNumber 是NSValue的子类
// NSNumber创建方式1
NSNumber *num = [NSNumber numberWithInt:22];
NSLog(@"num = %@", num);
// [NSNumber numberWithBool:YES];
// [NSNumber numberWithChar:'h'];
// [NSNumber numberWithDouble:23.4];
// [NSNumber numberWithFloat:12.4f];
// [NSNumber numberWithInteger:100];
// [NSNumber numberWithLong:200];
// [NSNumber numberWithLongLong:23333];
// [NSNumber numberWithShort:65];
// [NSNumber numberWithUnsignedChar:3];
// [NSNumber numberWithUnsignedInt:0x100];
// ....
// NSNumber创建方式2
NSNumber *num2 = @456;
NSLog(@"num2 = %@", num2);
// num2 = @12.3;
// num2 = @12.3f;
// num2 = @'c';
// num2 = @YES;
// ...
// 从对象转换成基本数据类型
int value = [num intValue];
NSLog(@"%d", value);
// [num floatValue];
// [num charValue];
// [num stringValue];
// [num unsignedIntegerValue];
// ...
// 比较大小
// 返回值类型为 NSComparisonResult
NSComparisonResult result = [num compare:num2];
switch (result)
{
// 左边对象和左右对象相等
case NSOrderedSame:
NSLog(@"%@ == %@", num, num2);
break;
// 左边对象小于右边对象
case NSOrderedAscending:
NSLog(@"%@ < %@", num, num2);
break;
// 左边对象大于右边对象
case NSOrderedDescending:
NSLog(@"%@ > %@", num, num2);
break;
default:
break;
}
// 判断两NSNumber对象值是否相等 相等返回 YES, 否则返回 NO
if ([num isEqual:@22])
{
NSLog(@"equal");
}
else
{
NSLog(@"no equal");
}
// [num isLessThan:(id)];
// [num isLessThanOrEqualTo:<#(id)#>];
// [num isGreaterThan:<#(id)#>]
// [num isGreaterThanOrEqualTo:<#(id)#>];
// [num isNotEqualTo:<#(id)#>];
// [num isEqualToNumber:<#(NSNumber *)#>];
// [num isEqualToValue:<#(NSValue *)#>];
// [num isEqualTo:<#(id)#>];
}
#pragma mark - NSValue
void value()
{
// NSValue 可以包装任何数据类型
CGPoint point = CGPointMake(12, 34);
// 把Point包装成对象
NSValue *va = [NSValue valueWithPoint:point];
NSLog(@"%@", va);
// [NSValue valueWithPointer:<#(const void *)#>];
// [NSValue valueWithRange:<#(NSRange)#>];
// [NSValue valueWithRect:<#(NSRect)#>];
// [NSValue valueWithSize:<#(NSSize)#>];
// 从对象转成结构体
CGPoint point2 = [va pointValue];
// 包装自定义结构体
typedef struct
{
int year;
int month;
int day;
}Date;
Date today = {2015, 4, 19};
char *type = @encode(Date); // 类型编码;
// 按照指定编码结构将自定义结构体包装成对象
NSValue *date = [NSValue value:&today withObjCType:type];
Date date2;
// 取出数组到指定缓冲区, 缓冲区应当足够大才行
[date getValue:&date2];
NSLog(@"%i, %i, %i", date2.year, date2.month, date2.day);
// 取出类型描述字符串
const char *s = [date objCType];
NSLog(@"%s", s);
}
#pragma mark - NSNull
void nsnull()
{
// 生成一个空对象
NSNull *kong = [NSNull null];
// NSNull 把NULL包装成一个对象, 这样就可以添加到集合中去
NSArray *arr = @[@1, @2, kong, @3];
NSLog(@"%@", arr);
NSNull *kong2 = [NSNull null];
NSNull *kong3 = [NSNull null];
// 单例模式, 类只能生成唯一的一个对象
if ((kong == kong2) && (kong2 == kong3))
{
NSLog(@"kong == kong2 == kong3");
}
}
#pragma mark - NSDate
void usagesOfDate()
{
// date方法返回当前时间
NSDate *date = [NSDate date];
NSLog(@"%@", date);
// 当前时间+10秒
date = [NSDate dateWithTimeIntervalSinceNow:10];
NSLog(@"%@", date);
/*
2015-04-19 13:47:58 +0000
2015-04-19 13:48:08 +0000
*/
// 返回 1970-01-01 + 指定秒数
date = [NSDate dateWithTimeIntervalSince1970:20];
NSLog(@"%@", date);
// 1970-01-01 00:00:20 +0000
// 返回 指定的日期 + 指定秒数
NSDate *date2 = [NSDate dateWithTimeInterval:10 sinceDate:date];
NSLog(@"%@", date2);
// 1970-01-01 00:00:30 +0000
// 返回一个遥远的将来时间
date2 = [NSDate distantFuture];
NSLog(@"%@", date2);
// 00:00:00 +0000
// 返回一个遥远的过去时间
date2 = [NSDate distantPast];
NSLog(@"%@", date2);
// 0000-12-30 00:00:00 +0000
date = [NSDate date];
NSLog(@"%@", date);
// 返回两个日期对象,时间较早的对象
date2 = [NSDate dateWithTimeIntervalSinceNow:100];
NSDate *date3 = [date earlierDate:date2];
NSLog(@"%@", date3);
// 返回两个日期对象, 时间较晚的对象
date3 = [date laterDate:date2];
NSLog(@"%@", date3);
// 格式化日期显示
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy/MM/dd hh:mm:ss"; // hh 以12小时制显示时间
NSString *riqi = [formatter stringFromDate:[NSDate date]];
NSLog(@"%@", riqi);
// 2015/04/19 02:34:50
formatter.dateFormat = @"yyyy/MM/dd HH:mm:ss"; // HH 以24小时制显示时间
riqi = [formatter stringFromDate:[NSDate date]];
NSLog(@"%@", riqi);
// 2015/04/19 14:34:50
// 格式化的字符串转日期
NSDate *newDate = [formatter dateFromString:riqi];
NSLog(@"%@", newDate);
// 2015-04-19 14:34:50 +0000
}