oc基础知识
2014-08-18 11:51
267 查看
基础知识(Foundation)
NSRange (location length)
NSPoint\CGPoint (CGFloat x, CGFloat y)
NSSize\CGSize (CGFloat width ,CGFloat
heighet)
NSRect\CGRect (NSPoint,NSSize)
typedef assing long NSUInteger;
例子: @“i love oc”
NSRange r1 = {2,4}; //可读性差不用
NSRange r2 = {location = 2,length = 4}; //
不用这个 ,太长
开发中用这个:
NSRange r3 = NSMakeRange(2,4);
查找一个单词在字符串中的范围:(重点)
NSString *str = @"i love oc";
NSRange range = [str rangeOfString :"love"];
NSLog(@"location=%d,length=%d",range.location,range.length);
如果找不到 length = 0 ,location = NSNoFound = -1
开发中常用:
CGPoint p1 = NSMakePoint(10,15);
NSPoint p1 = CGPointMake(10,15);
NSSize s1 = CGSizeMake(100,50);
CGSize s3 =NSMakeSize(100,50);
将CGRectMake();里的数字打印出来:
CGRect r1 = CGRectMake(0,0,100,50);
将结构体转化为字符串输出:NSString *str = NSStringFromPoint(p1);
NSLog(@"%@".str);
另一种创建CGRect方法
CGRect r2 = {{0,0}{100,90}};
或者:
CGRect r3 = {p1,s2}
比较两个点的坐标是否相同:依赖于CoreGrahics
BOOL b = CGPointEqualToPoint(CGPoint
(10,12),CGPointMake(10,12));
比较SIZE 以此类推。
判断函数里包不包含点:
BOOL b2 = CGRectContainsPoint(CGRectMake(50,50,100,50),CGRectMake(50,70));
NSLog(@"%d",b2);
字符串的创建:
1,NSString *str = @"1132123";
2,NSString *str2= [[NSString alloc] initWithString:@"jack"];
3,NSString *str3 = [[NSString alloc]
initFormat:@"age is %d",10];
C字符串转换 oc字符串:
4,NSString *str4 = [[NSString alloc] initWithUTF8String:"jack"];
OC字符串转换 C字符串:
5,const char *c = [str4 UTF8String];
6,类方法创建:
1>[NSString stringWithFormat:@""];
2>[NSString stringWithcontentsOfFile:]
3>[NSURL URLWithSting:@""]
7,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:
NSUTF8StingEncoding error:nil];
8,NSSting *str6 =[[NSString alloc]
initWtihContentsOFUrl:(NSURL*) encoding:NSUTF8StingEncoding error:nil];
读取文件:
1,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:
NSUTF8StringEncoding error:nil];
2,NSURL *url = [[NSURL alloc]
initWithString:@file//"路径名"];
NSLog(@"s6=\n"%@.s6);
利用方法检测代码:
[@"jack\n jack"writeToFile:@"路径"atomically:Yes encoding:NSUTF8StringEncoding error:nil];
NSMutableString:可变字符串
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
1>拼接内容到s1后面:
[s1 appendString:@"11 12"];
2>删除字符串中的某个字符,先要获取这个字符的范围,在删除、(比如删除 'is')
NSRange range = [s1 rangeOfString:@"is"];
[s1 deletecharacterInRange:range];
NSString:不可变字符串
NSString *s2 =[NSString
stringWithFormat:@"age is 10"];
NSString *s3 = [s2 stringByAppendingStingString:@"11 12"];
解释 :调用s2字符串 并且在s2字符串原有的字符的基础上拼接上@“11 12” 把拼接好的字符串
赋值给了s3 ,s2字符串只是复制 ,并没有改变,改变的是新对象s3.
这就是字符串可变和不可变得本质区别。
集合类 :NSArray NSSet NSDictionary
NSArray:不可变数组
NSMutableArray:可变数组
NSArray oc数组
oc数组 只能存放oc对象类型,但有个缺点不能放基本数据类型和空值(nil)。
比如: int struct enum等。
1,NSArray的创建:
NSArray *array2 = [NSArrayarrayWithObject:@"jack"];
注意:当只有一个元素的时候
NSArrayarrayWithObject 的Object后没有s,并且元素后也没有nil.
NSArrat *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil];
//nil:是数组元素结束的标记
2,怎么验证数组中有几个元素
[array2 count];
array2,count;
NSLog(@"%ld",array2.count);
3,怎么访问里面的每一个元素那
有两种方式:Index:索引
1>NSLog(@%@,[arrayobjectAtIndex:1]);//淘汰不用了
2>array3[0]; //仿c数组访问
NSLog(@"%@",arry3[0]]);
4假如数组中有4个元素
以前方法:
NSArrat *array4 = [NSArray arrayWithObjects:@"jack",@"rose",@"321313",nil];
简化后:@是一个关键字,表示创建一个对象
@[]:代表创建一个新的数组。
//快速创建一个NSArray对象
NSArray *array4 = @
[@"jack",@"rose",@"321313"];
NSArray遍历:
第一种方式:
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
for (int i = 0;i<array.count;i++)
{
NSLog(@"%@,array[i]");
}
p是指针:打印结果是类名+内存地址。
第二种方式:叫快速遍历。
开发中使用
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
把数组中的每一个元素一个一个拿出来赋值给obj.
每赋值一次执行一次循环体。
id obj代表着数组中的每一元素。
for(id obj in array)
{ //找出obj元素在数组中的位置
NSUInteger i= [array
indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
}
快速遍历的另一种方式://每遍历到一个元素,就会调用一次block,并且当前元素和索引位置
当做参数传给block。
[array enumerateObjextsUsingBlock];
^(id obj,NSUInteger idx,BooL *stop)
{
NSLog(@"%ld - %@",idx,obj);
if(idx == 0)
{
//停止遍历
*stop = YES;
}
}];
NSMutableArray 可变数组
NSMutableArray *array = [NSMutableArray arrayWithObject:@"rose",@"jim",nil];
添加元素
[array addObject:[[Person alloc]init]];
[array addObject:@""jack]
删除所有元素
[array removeAllObjects];
删除指定元素
[array removeObject:@"jack"];
删除第N(写数字)个索引位置的字符
[array removeObjectAtIndex:N]
NSLog(@"%ld",array.count);
看看数组中少了那个字符(元素),打印整个数组
NSLog(@"%@",array);
注意事项:
@[@"jack",@"rose"] 返回的是NSSarray,是不可变数组。
NSMutableArray *array = @[@"jack",@"rose"]
这种写法是错误的。
NSSet 没有快速创建方法
NSMutableSet 随时可以加对象,但加进去的对象是没有顺序的。
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet
setWithObjects:@"jack","rose","jack1","jack2",nil];
随机取出一个元素。
NSString *str = [s2 anyObject];
NSLog(@"%ld",s2.count);
NSMutableSet
NSMtableSet *s =[NSMutable set];
添加元素
[s addObject:@"jack"];
删除元素
[s removeObject:(id)];
NSSet 和 NSArray的对比
1,共同点
都是集合,都能存放多个OC对象{基本数据类型不能放}
都有一个可用的子类
本身不可变
2,不同点
NSArray有顺序,NSSet顺序。
NSdictionary 字 典
里面存储的东西都是键值对。key->value
使用场合:一对一关系的时候
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forkey:@"name"];
id obu = [dict objectForKey:@"name"];
NSLog(@"%@",obj);
NSDictionary *dict = [[NSDictionary dictionaryWithObjects:objects forKeys:keys]];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKey;
@“jack”,@"name";
@"北京",@“address”,
@"32323232",@"qq",nil];
id obj = [dic objectForKey:@"name"];
开发中用:
NSDictionary *dic = @{
@“name”:@"jack",
@“adress”:@"北京"};
id obj =dict[@"name"];
NSLog(@"%@",obj);
访问键值对的个数:
NSLog(@"%ld",dict.count);
NSMutableDictionary *dict =
[NSMutableDictionary dictionary];
添加键值对
[dict setObject:@"jack" forKey@"name"];
[dict setObject:@"北京" forKey@"address"];
删除键值对
[dict removeObjectForKey:@"name"];
NSLog("%@",dict); 打印字典会议一个key+value的形式输出。
[dict setObject:@"jim" forKey@"name"];
[dict setObject:@"jack" forKey@"name"];
如果字典中有两个相同的Key,那么在打印后最后一个属性会覆盖掉前一个属性。
NSString *str = dict[@"name"];
NSLog(@"%@",str);
注意点
@[@"name":@"jack"];只能在不可变的Dictionary中使用 ,不能再可变Dictionary中使用。
字典的遍历
之前的方法:
NSDictionary *dir = @{
@"address":@"jack",
@"name":@"jack1",
@"name1":@"jack",
@"qq":@"13132131"
};
NSArray *Key = [dict allKeys];
for (int i = 0;i<dict.count;i++)
{
NSString *Key =Keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@",key,object);
}
开发中用block
[dict enumrateKeysAndObjectUsingBlock:
^(id key,id obj,BOOL *stop)
{
NSLog(@"%@ - %@",key,obj)
*stop = YES; 停止遍历
} ];
牛B人写法(可读性差 让别人看不懂)
NSArray *person = @[
@{@"address":@"jack"},
@{"name":@"jack1"},
@{"name1":@"jack"},
@{"qq":@"13132131"}
];
这步:NSLog(@"[@'qq]%@",person[1][@"qq"]);
先去出1位置对应的字典,再取出字典中QQ这个key对应数据。
NSNumber:
基本数据类型无法放入集合类中,包装后可以放入。怎么包装:
1 in类型 转换为NSNumber 类型
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name":@"jack",
@"age":num
};
NSNumber *num2 = dict(@"age");
[num2 intValue]; 转换为int类型值
2,double类型
NSNumber *n = [NSNumber numberWithDouble:10.5];
[n doubleVaule];
3,基本数据类型转为字符串类型
NSString *str = [NSString stringWithFormat:@"%d",20];
4,把字符串转为基本数据类型
NSString *str = [NSString stringWithFormat:@"%d",20];
[str intValue];
打印出来看看:
NSLog(@"%d",[str intValue]);
编译器特性:
开发中用下面的
NSArray *array = @{
@{@"name":@"jack",@"age": [NSNumber numberWithInt:26]},
@{@"name":@"jim",@"age": [NSNumber numberWithInt:28]},
@{@"name":@"rose",@"age": [NSNumber numberWithInt:25]}
}
以后:比如上面,[NSNumber numberWithInt:26]
写成@26.编译器特性,编译器会直接把@26 转换成NSNumber类型,所以上面可以写成:
}
NSArray *array = @{
@{@"name":@"jack",@"age":@26},
@{@"name":@"jim",@"age":@29},
@{@"name":@"rose",@"age":@25}
}
其他基本数据类型都可以包装成NSNumber.
将int age =10 变量包装成NSNumber类型
@(age); 如果不写小括号 @age;系统会认为是关键字 报错。
NSValue:
NSNumber 只能保证数字,不能包装结构体。
NSValue 能包装任何东西
NSNumber之所以能包装基本数据类型为对象,是因
为继承了NSValue。
CGPoint p = CGPointMake(10,10);
NSValue *value = [NSValue valueWithPoint:p];
NSArray *array =@{value};
将Value转为对应的结构体
[value pointValue];
NSDate:利用对象表示时间
创建一个时间对象
NSDate *date = [NSDate date];
打印出来的时间是0时区的时间,与北京慢了8个小时。
NSLog(@"%@",date);
从date时间 慢5秒
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
从1970开始走过的秒数
NSTimeTnterval seconds = [date2 timeInterval5Since1970];
从调用代码到现在的时间
[date2 timeIntervalSinceNow];
开发应用:日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
y年 M月 d日 m分 s秒 H(24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"
NSString *str = [formatter stringFromDate:date];
NSLog(@"% @",str);
把字符串转化为NSDate
NSString *time = @"2011/09/10 19:60";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm"
NSDate *date=[formatter dateFromString:time];
NSLog(@"%d",date);
NSRange (location length)
NSPoint\CGPoint (CGFloat x, CGFloat y)
NSSize\CGSize (CGFloat width ,CGFloat
heighet)
NSRect\CGRect (NSPoint,NSSize)
typedef assing long NSUInteger;
例子: @“i love oc”
NSRange r1 = {2,4}; //可读性差不用
NSRange r2 = {location = 2,length = 4}; //
不用这个 ,太长
开发中用这个:
NSRange r3 = NSMakeRange(2,4);
查找一个单词在字符串中的范围:(重点)
NSString *str = @"i love oc";
NSRange range = [str rangeOfString :"love"];
NSLog(@"location=%d,length=%d",range.location,range.length);
如果找不到 length = 0 ,location = NSNoFound = -1
开发中常用:
CGPoint p1 = NSMakePoint(10,15);
NSPoint p1 = CGPointMake(10,15);
NSSize s1 = CGSizeMake(100,50);
CGSize s3 =NSMakeSize(100,50);
将CGRectMake();里的数字打印出来:
CGRect r1 = CGRectMake(0,0,100,50);
将结构体转化为字符串输出:NSString *str = NSStringFromPoint(p1);
NSLog(@"%@".str);
另一种创建CGRect方法
CGRect r2 = {{0,0}{100,90}};
或者:
CGRect r3 = {p1,s2}
比较两个点的坐标是否相同:依赖于CoreGrahics
BOOL b = CGPointEqualToPoint(CGPoint
(10,12),CGPointMake(10,12));
比较SIZE 以此类推。
判断函数里包不包含点:
BOOL b2 = CGRectContainsPoint(CGRectMake(50,50,100,50),CGRectMake(50,70));
NSLog(@"%d",b2);
字符串的创建:
1,NSString *str = @"1132123";
2,NSString *str2= [[NSString alloc] initWithString:@"jack"];
3,NSString *str3 = [[NSString alloc]
initFormat:@"age is %d",10];
C字符串转换 oc字符串:
4,NSString *str4 = [[NSString alloc] initWithUTF8String:"jack"];
OC字符串转换 C字符串:
5,const char *c = [str4 UTF8String];
6,类方法创建:
1>[NSString stringWithFormat:@""];
2>[NSString stringWithcontentsOfFile:]
3>[NSURL URLWithSting:@""]
7,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:
NSUTF8StingEncoding error:nil];
8,NSSting *str6 =[[NSString alloc]
initWtihContentsOFUrl:(NSURL*) encoding:NSUTF8StingEncoding error:nil];
读取文件:
1,NSString *str5 =[[NSString alloc] initWithContentsOfFile:@"路径名"encoding:
NSUTF8StringEncoding error:nil];
2,NSURL *url = [[NSURL alloc]
initWithString:@file//"路径名"];
NSLog(@"s6=\n"%@.s6);
利用方法检测代码:
[@"jack\n jack"writeToFile:@"路径"atomically:Yes encoding:NSUTF8StringEncoding error:nil];
NSMutableString:可变字符串
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
1>拼接内容到s1后面:
[s1 appendString:@"11 12"];
2>删除字符串中的某个字符,先要获取这个字符的范围,在删除、(比如删除 'is')
NSRange range = [s1 rangeOfString:@"is"];
[s1 deletecharacterInRange:range];
NSString:不可变字符串
NSString *s2 =[NSString
stringWithFormat:@"age is 10"];
NSString *s3 = [s2 stringByAppendingStingString:@"11 12"];
解释 :调用s2字符串 并且在s2字符串原有的字符的基础上拼接上@“11 12” 把拼接好的字符串
赋值给了s3 ,s2字符串只是复制 ,并没有改变,改变的是新对象s3.
这就是字符串可变和不可变得本质区别。
集合类 :NSArray NSSet NSDictionary
NSArray:不可变数组
NSMutableArray:可变数组
NSArray oc数组
oc数组 只能存放oc对象类型,但有个缺点不能放基本数据类型和空值(nil)。
比如: int struct enum等。
1,NSArray的创建:
NSArray *array2 = [NSArrayarrayWithObject:@"jack"];
注意:当只有一个元素的时候
NSArrayarrayWithObject 的Object后没有s,并且元素后也没有nil.
NSArrat *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil];
//nil:是数组元素结束的标记
2,怎么验证数组中有几个元素
[array2 count];
array2,count;
NSLog(@"%ld",array2.count);
3,怎么访问里面的每一个元素那
有两种方式:Index:索引
1>NSLog(@%@,[arrayobjectAtIndex:1]);//淘汰不用了
2>array3[0]; //仿c数组访问
NSLog(@"%@",arry3[0]]);
4假如数组中有4个元素
以前方法:
NSArrat *array4 = [NSArray arrayWithObjects:@"jack",@"rose",@"321313",nil];
简化后:@是一个关键字,表示创建一个对象
@[]:代表创建一个新的数组。
//快速创建一个NSArray对象
NSArray *array4 = @
[@"jack",@"rose",@"321313"];
NSArray遍历:
第一种方式:
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
for (int i = 0;i<array.count;i++)
{
NSLog(@"%@,array[i]");
}
p是指针:打印结果是类名+内存地址。
第二种方式:叫快速遍历。
开发中使用
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"jack"];
把数组中的每一个元素一个一个拿出来赋值给obj.
每赋值一次执行一次循环体。
id obj代表着数组中的每一元素。
for(id obj in array)
{ //找出obj元素在数组中的位置
NSUInteger i= [array
indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
}
快速遍历的另一种方式://每遍历到一个元素,就会调用一次block,并且当前元素和索引位置
当做参数传给block。
[array enumerateObjextsUsingBlock];
^(id obj,NSUInteger idx,BooL *stop)
{
NSLog(@"%ld - %@",idx,obj);
if(idx == 0)
{
//停止遍历
*stop = YES;
}
}];
NSMutableArray 可变数组
NSMutableArray *array = [NSMutableArray arrayWithObject:@"rose",@"jim",nil];
添加元素
[array addObject:[[Person alloc]init]];
[array addObject:@""jack]
删除所有元素
[array removeAllObjects];
删除指定元素
[array removeObject:@"jack"];
删除第N(写数字)个索引位置的字符
[array removeObjectAtIndex:N]
NSLog(@"%ld",array.count);
看看数组中少了那个字符(元素),打印整个数组
NSLog(@"%@",array);
注意事项:
@[@"jack",@"rose"] 返回的是NSSarray,是不可变数组。
NSMutableArray *array = @[@"jack",@"rose"]
这种写法是错误的。
NSSet 没有快速创建方法
NSMutableSet 随时可以加对象,但加进去的对象是没有顺序的。
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet
setWithObjects:@"jack","rose","jack1","jack2",nil];
随机取出一个元素。
NSString *str = [s2 anyObject];
NSLog(@"%ld",s2.count);
NSMutableSet
NSMtableSet *s =[NSMutable set];
添加元素
[s addObject:@"jack"];
删除元素
[s removeObject:(id)];
NSSet 和 NSArray的对比
1,共同点
都是集合,都能存放多个OC对象{基本数据类型不能放}
都有一个可用的子类
本身不可变
2,不同点
NSArray有顺序,NSSet顺序。
NSdictionary 字 典
里面存储的东西都是键值对。key->value
使用场合:一对一关系的时候
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forkey:@"name"];
id obu = [dict objectForKey:@"name"];
NSLog(@"%@",obj);
NSDictionary *dict = [[NSDictionary dictionaryWithObjects:objects forKeys:keys]];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKey;
@“jack”,@"name";
@"北京",@“address”,
@"32323232",@"qq",nil];
id obj = [dic objectForKey:@"name"];
开发中用:
NSDictionary *dic = @{
@“name”:@"jack",
@“adress”:@"北京"};
id obj =dict[@"name"];
NSLog(@"%@",obj);
访问键值对的个数:
NSLog(@"%ld",dict.count);
NSMutableDictionary *dict =
[NSMutableDictionary dictionary];
添加键值对
[dict setObject:@"jack" forKey@"name"];
[dict setObject:@"北京" forKey@"address"];
删除键值对
[dict removeObjectForKey:@"name"];
NSLog("%@",dict); 打印字典会议一个key+value的形式输出。
[dict setObject:@"jim" forKey@"name"];
[dict setObject:@"jack" forKey@"name"];
如果字典中有两个相同的Key,那么在打印后最后一个属性会覆盖掉前一个属性。
NSString *str = dict[@"name"];
NSLog(@"%@",str);
注意点
@[@"name":@"jack"];只能在不可变的Dictionary中使用 ,不能再可变Dictionary中使用。
字典的遍历
之前的方法:
NSDictionary *dir = @{
@"address":@"jack",
@"name":@"jack1",
@"name1":@"jack",
@"qq":@"13132131"
};
NSArray *Key = [dict allKeys];
for (int i = 0;i<dict.count;i++)
{
NSString *Key =Keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@",key,object);
}
开发中用block
[dict enumrateKeysAndObjectUsingBlock:
^(id key,id obj,BOOL *stop)
{
NSLog(@"%@ - %@",key,obj)
*stop = YES; 停止遍历
} ];
牛B人写法(可读性差 让别人看不懂)
NSArray *person = @[
@{@"address":@"jack"},
@{"name":@"jack1"},
@{"name1":@"jack"},
@{"qq":@"13132131"}
];
这步:NSLog(@"[@'qq]%@",person[1][@"qq"]);
先去出1位置对应的字典,再取出字典中QQ这个key对应数据。
NSNumber:
基本数据类型无法放入集合类中,包装后可以放入。怎么包装:
1 in类型 转换为NSNumber 类型
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name":@"jack",
@"age":num
};
NSNumber *num2 = dict(@"age");
[num2 intValue]; 转换为int类型值
2,double类型
NSNumber *n = [NSNumber numberWithDouble:10.5];
[n doubleVaule];
3,基本数据类型转为字符串类型
NSString *str = [NSString stringWithFormat:@"%d",20];
4,把字符串转为基本数据类型
NSString *str = [NSString stringWithFormat:@"%d",20];
[str intValue];
打印出来看看:
NSLog(@"%d",[str intValue]);
编译器特性:
开发中用下面的
NSArray *array = @{
@{@"name":@"jack",@"age": [NSNumber numberWithInt:26]},
@{@"name":@"jim",@"age": [NSNumber numberWithInt:28]},
@{@"name":@"rose",@"age": [NSNumber numberWithInt:25]}
}
以后:比如上面,[NSNumber numberWithInt:26]
写成@26.编译器特性,编译器会直接把@26 转换成NSNumber类型,所以上面可以写成:
}
NSArray *array = @{
@{@"name":@"jack",@"age":@26},
@{@"name":@"jim",@"age":@29},
@{@"name":@"rose",@"age":@25}
}
其他基本数据类型都可以包装成NSNumber.
将int age =10 变量包装成NSNumber类型
@(age); 如果不写小括号 @age;系统会认为是关键字 报错。
NSValue:
NSNumber 只能保证数字,不能包装结构体。
NSValue 能包装任何东西
NSNumber之所以能包装基本数据类型为对象,是因
为继承了NSValue。
CGPoint p = CGPointMake(10,10);
NSValue *value = [NSValue valueWithPoint:p];
NSArray *array =@{value};
将Value转为对应的结构体
[value pointValue];
NSDate:利用对象表示时间
创建一个时间对象
NSDate *date = [NSDate date];
打印出来的时间是0时区的时间,与北京慢了8个小时。
NSLog(@"%@",date);
从date时间 慢5秒
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
从1970开始走过的秒数
NSTimeTnterval seconds = [date2 timeInterval5Since1970];
从调用代码到现在的时间
[date2 timeIntervalSinceNow];
开发应用:日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
y年 M月 d日 m分 s秒 H(24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"
NSString *str = [formatter stringFromDate:date];
NSLog(@"% @",str);
把字符串转化为NSDate
NSString *time = @"2011/09/10 19:60";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm"
NSDate *date=[formatter dateFromString:time];
NSLog(@"%d",date);
相关文章推荐