Foundation框架-学习笔记<一>
2015-08-02 10:37
351 查看
说明:自己的学习记录,记录的并不全面,只是把自己学到的记录下来,仅供大家参考。
0】框架使用注意点汇总
1)使用CG开头的函数需要添加框架:CoreGraphics框架
2)Foundation框架里面的东西一般都以NS开头。
3)OC中不允许直接修改对象的结构体属性的成员。但允许直接修改对象的结构体属性。
eg:
self.head.frame.origin.y = self.head.frame.origin.y - 10; // 错误,不能直接修改y值。
CGRect tempFrame = self.head.frame; // 间接方式修改属性值,这样就对了
tempFrame.origin.y -= 10;
self. head.frame = tempFrame;
1】NSRange 范围类型
定义:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
赋值:
NSRange r1 = {2, 4}; //不用这种方式
NSRange r2 = {.location = 2, .length = 4}; //不用这种方式
NSRange r3 = NSMakeRange(2,4); //建议采用这种方式赋值。
常用方法/函数:
1)NSMakeRange 给NSRange赋值
eg:NSRange r3 = NSMakeRange(2,4); //建议采用这种方式赋值。
2】NSString 字符串类型(不可变字符串)
定义变量:
NSString *s = @"abc";
常用方法/函数:
1)rangeOfString方法: 查找某个字符串在str中的范围。
如果找不到,length=0,location = NSNotFound(其值为-1,用%d输出是-1,用%ld输出是9223371……一串很长的数字,这是因为符号位与非符号位造成的)。
eg: NSRange range = [str rangeOfString:@"java"];
2)NSStringFromPoint函数 将某个点转换为字符串
3)stringWithFormat方法 返回格式化后的字符串
格式:[NSString stringWithFormat:(NSString *), ...]
eg:NSString *s = [NSString stringWithFormat:@"age is %d",43];
4) initWithFormat方法 返回初始化的字符串
格式:[[NSString alloc] initWithFormat:(NSString *)]
eg:NSString *s1 = [[NSString alloc] initWithFormat:@"%d",44];
5)initWithUTF8String方法:C语言字符串转换为NSString字符串
格式:[NSString alloc] initWithUTF8String:(const char *)
eg:NSString *s1 = [[NSString alloc] initWithUTF8String:"abc"];
6)UTF8String方法 :NSString字符串转变为C语言的字符串。
eg:const char *ss2 = [s1 UTF8String];
7)initWithContentsOfFile方法 从本地文件中读取数据初始化NSString字符串
格式:
initWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)
说明:
(NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编码:NSUTF8StringEncoding
eg:
NSString *s3 = [[NSString alloc] initWithContentsOfFile:@"/Users/liugang/临时资料/001.txt" encoding:NSUTF8StringEncoding
error:nil];
注意:该方法的路径字符串可以含有中文。
8)initWithContentsOfURL方法 从URl指定的文件中读取数据初始化NSString字符串。
格式:
initWithContentsOfURL:(NSURL *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)
说明:(NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/临时资料/001.txt"];
[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
9)writeToFile方法 :将NSString字符串写入文件,文件路径只能使用本地路径
格式:[@"agb" writeToFile:(NSString *) atomically:(BOOL) encoding:(NSStringEncoding) error:<#(NSError *__autoreleasing
*)#>]
说明:
@""中是英文的时候才能自动带出writeToFile函数。
atomically:YE
1b5d7
S,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。
要对写入的字符串进行换行,在字符串中加入"\n"。
eg:
[@"I love you" writeToFile:@"/Users/liugang/临时资料/003.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
10)writeToURL方法:将NSString字符串写入文件,文件路径使用URL路径
格式:
[s3 writeToURL:(NSURL *) atomically:(BOOL) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)]
说明:
atomically:YES,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。
要对写入的字符串进行换行,在字符串中加入"\n"。
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
NSString *s3 = @"i love you";
[s3 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]
11)stringByAppendingString方法:对NSString字符串后附加字符串并返回新字符串的指针。
格式:
[s2 stringByAppendingString:(NSString *)];
说明:
从这里可以看出可变字符串与不可变字符串之间的区别。
eg:
NSString *s2 =[NSString stringWithFormat:@"I am liugang"];
NSString *s3 = [s2 stringByAppendingString:@" too"];
12)pathExtension属性:扩展的路径(如果有的话)的字符串作为解读为路径。(只读)
说明:
返回该路径中文件的扩展名,注意"."并不属于扩展名内。
格式:
@property(readonly, copy) NSString *pathExtension
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
13)lowercaseString属性:一个字符串的小写字母表示。
格式:
@property(readonly, copy) NSString *lowercaseString
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
14)isEqualToString方法:返回一个布尔值表明一个给定字符串是否等于接收的文字,基于unicode的比较。
格式:
- (BOOL)isEqualToString:(NSString *)aString
说明:
相等返回YES,不相等返回NO
eg:
NSString *extension = [[path pathExtension] lowercaseString];
if ([extension isEqualToString:@"h"] || [extension isEqualToString:@"m"] || [extension isEqualToString:@"c"])
{
//NSLog(@"不是文件夹");
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [content componentsSeparatedByString:@"\n"];
//输出每一行的数据
// [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// NSLog(@"第%ld行:%@",idx,obj);
// }];
return array.count;
}
15)intValue属性:将OC字符串类型转换为其对应的数值。
格式:
@property(readonly) int intValue
eg:
NSString *str2 = [NSString stringWithFormat:@"100"];
NSLog(@"%d",[str2 intValue]); //输出100
2】NSMutableString 可变字符串类型
说明:
NSMutableString继承NSString,所以所有的NSString方法都能用在NSMutableString类上。
常用方法/函数:
1) appendString方法:对NSMutableString字符串进行扩充,在原字符串的尾部增加字符串。
格式:
[s1 appendString:(NSString *)]
eg:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
[s1 appendString:@"wenjing"];
2)deleteCharactersInRange方法:对NSMutableString字符串删除对应范围的字符
格式:
[s1 deleteCharactersInRange:(NSRange)]
eg:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
NSRange r1 = [s1 rangeOfString:@"you"];
[s1 deleteCharactersInRange:r1];
3】NSURL 资源路径类型
说明:URL,资源路径 ;
格式:
“协议头://路径”
eg:file:// ; ftp:// ; http://weibo.com/a.png;
常用方法/函数:
1)initWithString 初始化赋值NSURL对象。
eg:NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
注意:
使用该方法的路径字符串中不要含有中文。
4】NSPoint\CGPoint 点类型
说明:
两个是等价的,但CGPoint具有跨平台性。
表示一个点。
常用方法/函数:
1)NSMakePoint/CGPointMake函数: 给NSPoint\CGPoint赋值
NSPoint p1 = NSMakePoint(10,20);
CGPoint p2 = CGPointMake(30,20); //最常用
或:
CGPoint p1 = NSMakePoint(10,20);
NSPoint p2 = CGPointMake(30,20); //最常用
5】NSSize\CGSize 描述大小的类型
说明:
表示一个矩形区域大小,一般用来描述一个UI的大小
两个是等价的,但CGSize具有跨平台性。
常用方法/函数:
1)NSMakeSize/CGSizeMake函数: 赋值
NSSzie s1 = NSMakeSize(10,20);
CGSzie s2 = CGSzieMake(40,50);
2)CGSizeEqualToRect函数: 比较
6】NSRect\CGRect 表示矩形的类型
说明:
描述一个矩形大小以及位置,拥有x,y值以及宽和高。
用NSLog输出时,不能用%@直接输出,要用NSStringFromCGRect(CGRect rect)函数转化为字符串进行输出。
常用方法/函数:
1)NSMakeRect/CGRectMake函数: 赋值函数
NSRect = NSMakeRect(0,0,10,30);
CGRect = CGRectMake(0,0,20,30);
2)CGRectEqualToRect函数: 比较函数
3)CGRectContainsPoint函数: 判断某个点是否在某个矩形区域
7】NSArray数组类型(不可变数组)
说明:
1、利用C语言形式的数组建立的数组,只能放一种类型的数据。
2、OC不能放基本数据类型、非OC对象,只能存放OC对象。
3、OC数组是不能存放nil值。
4、直接用%@输出NSArray数组时会把数组中所有项全部输出。
常用方法/函数:
1)array方法:创建一个空的OC数组。
eg:
NSArray *array = [NSArray array]; //这个array永远是一个空数组。
2)arrayWithObjcet:创建并返回一个数组,其中包含一个给定的对象。
eg:
NSArray *array = [NSArray arrayWithObject:@"abc"];
3)arrayWithObjcets:创建并返回一个数组,其中含有多个给定的对象。
格式:
[NSArray arrayWithObjects:(id), ..., nil]
说明:
1)nil是数组的结束标示。
2)不允许写多个nil,只能在最后加一个nil。
eg:
NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
4)count:返回数组元素的个数。
格式:
@property(readonly) NSUInteger count
eg:
NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
int x = [array count];
5)objectAtIndex:返回位于指定索引的对象。
格式:
- (id)objectAtIndex:(NSUInteger)index
说明:
数组中第一个元素的下标索引值为0;
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",[array objectAtIndex:0]);
6)“[”“]”:编译器特性,快速访问数组NSArray元素。
说明:
编译器遇到[]类型的代码会自动转换为objectAtIndex形式。
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",array[0]);
7)快速创建多个元素的OC对象数组,这个也是编译器特性。
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSArray *array1 = @[@"123",@"abc",@"432"]; //和上面是等价的。
8)遍历OC对象数组。
eg:
NSArray *array = @[@"123",@"abc",@"432"];
//方法一
for (int i = 0; i < array.count; i++) {
NSLog(@"%d-%@",i,array[i]);
}
//方法二
for (id i in array)
{
NSUInteger x = [array indexOfObject:i];
NSLog(@"%ld-%@",x,i);
}
//方法三
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//每遍历到一个元素,就会调用一次block
//并且当前元素和索引位置当做参数传给block
//给*stop赋值"YES"或"NO",来继续遍历或停止遍历。
NSLog(@"%ld-%@",idx,obj);
}];
9)indexOfObject:返回与参数传入的数组元素相等的元素的索引下标
格式:
- (NSUInteger)indexOfObject:(id)anObject
eg:
for (id i in array)
{
NSUInteger x = [array indexOfObject:i];
NSLog(@"%ld-%@",x,i);
}
10)enumerateObjectsUsingBlock:利用块模块遍历数组
说明:
执行一个给定的块用于数组中的每个对象,从第一个对象,并继续通过数组最后一个对象。
如果块参数等于零这个方法将引发一个异常。值分配块内块执行后将被收回。使用保留显式地维护这些值。
格式:
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
eg:
NSArray *array = @[@"123",@"abc",@"432"];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
//每遍历到一个元素,就会调用一次block
//并且当前元素和索引位置当做参数传给block
//给*stop赋值"YES"或"NO",来停止遍历或继续遍历。
NSLog(@"%ld-%@",idx,obj);
if(idx == 1)
{ *stop = YES;} //停止遍历
}];
11)componentsSeparatedByString:返回一个数组,其中包含来自接收者的子字符串,用一个给定的分隔符进行分割。
格式:
- (NSArray *)componentsSeparatedByString:(NSString *)separator
eg:
int codeLineCount(NSString *path)
{
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//以“\n”分割字符串
NSArray *array = [content componentsSeparatedByString:@"\n"];
//变量该array数组。
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第%d行:%@",idx,obj);
}];
return array.count;
}
12)高级应用。
eg:
1)数组中的元素对象为字典对象。
NSArray * array3 = @[
@{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"},
@{@"1":@"bbb",@"2":@"ccc"},
@{@"1":@"ccc",@"2":@"bbb"}
];
// NSDictionary *dict6 = array3[1];
NSLog(@"%@",array3[1][@"1"]);
7】NSMutableArray数组类型(可变数组)
说明:
1)NSArray的子类。NSArray创建好的数组,后面不能改变数组的大小,而NSMutableArray数组可以。
2)NSArray的方法都可用在NSMutableArray上。
3)NSMutableArray不能用“@[]”形式来初始化数组,这种形式只能用于NSArray数组。
常用方法/函数:
1)addObject:在数组中插入一个对象。
格式:
- (void)addObject:(id)anObject
eg:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"123", @"agb", nil];
[array addObject:@"456"];
2)removeObject:删除数组中与给定对象相等的数组元素
格式:
- (void)removeObject:(id)anObject
3)removeAllObjects:清空数组的所有元素。
格式:
- (void)removeAllObjects
4)removeObjectAtIndex:删除指定索引位置的元素
格式:
- (void)removeObjectAtIndex:(NSUInteger)index
说明:
删除前面的某个元素,后面的元素会依次往前移动一位。即后面元素的索引值均减1。
5)removeLastObject:删除数组的最后一个元素。
格式:
- (void)removeLastObject
8】NSFileManager文件管理器类型
说明:
一个NSFileManager对象允许您检查的文件系统的内容并对其进行更改。一个文件管理器对象通常是第一个与文件系统的交互。你用它来定位,创建、复制和移动文件和目录。您还可以使用它来获得一个文件或目录的信息或改变它的一些属性。
常用方法/函数:
1)defaultManager:返回程序的共享文件管理器对象
格式:
+ (NSFileManager *)defaultManager
eg:
NSFileManager *mgr = [NSFileManager defaultManager];
2)fileExistsAtPath: isDirectory::检测文件路径是否存在,并检测是否为文件夹
说明:
返回一个布尔值,指示在指定的路径文件或目录是否存在。isDirectory参数表示的路径是否指向一个目录或一个常规文件。
格式:
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory
eg:
//获得文件的管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//判断path是否存在,如果不存在直接返回0
BOOL dir = NO; //标记是否为文件夹
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
if (!exist) {
NSLog(@"该文件路径不存在!");
return 0;
}
if (dir) {
NSLog(@"为文件夹!");
}
else
{
NSLog(@"不是文件夹");
}
3)contentsOfDirectoryAtPath:path error:nil:返回指定路径下包含的文件或文件夹的名称。
格式:
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
eg:
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
9】NSSet:定义一个无序的集合对象。(不可变)
说明:
类声明一个无序的集合对象。只能存放oc对象,不存基本数据类型(int、float、double、char、struct、enum等)。
常用方法/函数:
1)set:创建并返回一个空集。
格式:
+ (instancetype)set
说明:
该方法主要用在可变NSMutableSet上。
eg:
NSSet *s = [NSSet set];
2)setWithObjects:创建并返回一个包含列表中对象的set集合。
格式:
+ (instancetype)setWithObjects:(id)firstObj, firstObj, ...
eg:
NSSet *s2 = [NSSet setWithObjects:@"123", @"abc", nil];
3)anyObject:返回set集合中的一个对象
说明:
如果set为空,返回的对象为nil;
格式:
- (id)anyObject
10】NSMutableSet:定义一个可变的无序的集合对象。
说明:
NSMutableSet为NSSet的子类。
NSSet的方法,NSMutableSet都能使用。
常用方法/函数:
1)addObject:增加对象。
格式:
- (void)addObject:(id)object
eg:
NSMutableSet *s3 = [NSMutableSet set];
[s3 addObject:@"123"];
[s3 removeObject:@"123"];
2)removeObject:删除对象
格式:
- (void)removeObject:(id)object
11】NSDictionary字典类型(不可变)
说明:
字典对象运行有相同的objcet,但不允许有相同的key。
字典是无序的。
常用方法/函数:
1)dictionary方法:创建并返回一个空的NSDictionary对象
说明:
该方法一般用在可变字典类型上。
格式:
+ (instancetype)dictionary
2)dictionaryWithObject: forKey:方法:创建并返回包含一个键和值得字典对象。
说明:
格式:
+ (instancetype)dictionaryWithObject:(id)anObject forKey:(id<NSCopying>)aKey
eg:
NSDictionary *dict = [NSDictionary dictionary];
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"agbcde" forKey:@"01"];
3)dictionaryWithObjects: forKeys: 方法:用数组创建含多个元素的字典对象
格式:
+ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
eg:
NSArray *keys = @[@"1",@"2",@"3"];
NSArray *objects = @[@"aaa",@"bb",@"ccc"];
NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
4)"@{}"机制:oc编译机制快速方便创建字典对象
eg:
NSDictionary *dict4 = @{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"};
说明:
":"前面的为键值,后面的为字典内容。
5)+ (instancetype)dictionaryWithObjectsAndKeys方法:创建并返回一个字典条目,来自指定的一组值和键。
格式:
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
6)count属性:返回字典中条目(键值对)的数量。
格式:
@property(readonly) NSUInteger count
eg:
NSLog(@"%d",dict5.count);
7)allKeys属性:返回一个数组包含所有的key值。
说明:
如果一个key值没有,数组allKeys为空。
格式:
@property(readonly, copy) NSArray *allKeys
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
NSArray *array = [dict5 allKeys];
8)"[ ]"机制:快速取字典对象中的key对应的object
eg:
NSDictionary *dict4 = @{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"};
NSString *object = dict5[@"1"];
9)enumerateKeysAndObjectsUsingBlock方法:利用block遍历字典对象。
说明:
stop用来传递是否停止遍历的参数,YES表示停止。
格式:
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
//笨得传统遍历方式
NSArray *array3 = dict5.allKeys;
for (int i = 0; i < array3.count; i++)
{
NSString *key = array3[i];
NSString *object = dict5[key];
NSLog(@"%@-%@",key,object);
}
//利用block遍历字典对象
[dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@--%@",key,obj);
}];
12】NSMutableDictionary字典类型(不可变)
说明:
字典条目可以增加减少。
不能用"@{}"机制对NSMutableDictionary进行初始化,因为“@{}”只能用在不可变字典类型。
NSMutableDictionary是NSDictionary的子类。
常用方法/函数:
1)dictionary方法:创建并返回一个空的NSDictionary对象
说明:
该方法一般用在可变字典类型上。
格式:
+ (instancetype)dictionary
2)setObject: forKey:方法:增加字典条目。
说明:
若新增加的key值已经存在,将会用新增加的object值替换原有的。
格式:
- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey
eg:
NSMutableDictionary *dict6 = [NSMutableDictionary dictionary];
[dict6 setObject:@"aaaa" forKey:@"1"];
[dict6 setObject:@"bbbb" forKey:@"2"];
[dict6 setObject:@"cccc" forKey:@"3"];
3)removeObjectForKey方法:删除对应key值的字典条目。
格式:
- (void)removeObjectForKey:(id)aKey
eg:
NSMutableDictionary *dict6 = [NSMutableDictionary dictionary];
[dict6 setObject:@"aaaa" forKey:@"1"];
[dict6 setObject:@"bbbb" forKey:@"2"];
[dict6 setObject:@"cccc" forKey:@"3"];
[dict6 removeObjectForKey:@"2"];
13】NSNumber类型:将c语言的基本数据类型中的数值型(int,float,double,char)转换为OC对象。
说明:
NSArray、NSDictionary等OC类型对象只能存储OC对象,对于基本数据类型的存储,需要使用NSNumber转换为OC对象才能去存储。
NSNumber之所能包装基本类型,是因为继承了NSValue,NSValue才是包装进行数据转换万能的。
常用方法/函数:
1)@(value)、@4、@'a'机制:编译器特性,将基本数据类型快速转变为OC对象的方法
说明:
对于变量使用时,需要加上"()"代表取变量的值再进行转换。
eg:
NSArray *array8 = @[@4,@'a',@"agb"];
2)numberWithInt方法:将int类型数据转换为Number对象。
格式:
+ (NSNumber *)numberWithInt:(int)value
eg:
NSNumber *x = [NSNumber numberWithInt:2 ];
3)intValue属性:将Number对象转化为int类型数据。
格式:
@property(readonly) int intValue
eg:
1) NSNumber *x = [NSNumber numberWithInt:2 ];
int
xx = [x intValue];
2) NSLog("%d",[@"20" intValue]);
4)numberWithFloat方法:将float类型数据转换为Number对象。
格式:
+ (NSNumber *)numberWithFloat:(float)value
5)floatValue属性:将Number对象转化为float类型数据。
格式:
@property(readonly) float floatValue
14】NSValue:包装各类数据类型
说明:
一个NSValue对象是一个简单的容器一个C或objective - C数据项。它可以容纳任何标量类型如int、浮动,char,指针,结构和对象id引用。使用这个类来处理这样的数据类型集合(如NSArray和NSSet)键值编码,和其他api需要objective
- c的对象。NSValue对象总是不变的。
常用方法/函数:
1)valueWithPoint方法:将结构体point转换为NS类OC对象
说明:
格式:
+ (NSValue *)valueWithPoint:(NSPoint)aPoint
eg:
//包装结构体
CGPoint p = CGPointMake(10, 20);
NSValue *v = [NSValue valueWithPoint:p]; // 将结构体点转换为OC对象Value类型
NSArray *array9 = @[v];
p = [v pointValue]; // 将Value类型转换为结构体点类型。
2)pointValue属性:返回Point类型的值
说明:
格式:
@property(readonly) NSPoint pointValue
eg:
CGPoint p = CGPointMake(10, 20);
NSValue *v = [NSValue valueWithPoint:p]; // 将结构体点转换为OC对象Value类型
NSArray *array9 = @[v];
p = [v pointValue]; // 将Value类型转换为结构体点类型。
15】NSDate日期类型
说明:
用于对日期时间的表示,最小单位一般用秒。
常用方法/函数:
1)date类方法:创建并返回一个新的日期设置为当前日期和时间。
说明:
注意设置的日期时间为格林尼治时间,与北京时间差8小时。
格式:
+ (instancetype)date
eg:
NSDate *date = [NSDate date];
NSLog(@"%@",date);
2)dateWithTimeInterval: sinceDate:方法:返回一个从指定时间晚多少秒的时间。
格式:
+ (instancetype)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date
说明:
seconds :晚的秒数。
eg:
NSDate *date = [NSDate date];
NSLog(@"%@",date);
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
3)timeIntervalSince1970属性:返回距离1970-1-1 00:00:00已经走过的秒数。
说明:
返回的类型为 NSTimeInterval,实际该类型的原型为double类型。
格式:
@property(readonly) NSTimeInterval timeIntervalSince1970
eg:
NSDate *date = [NSDate date];
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
NSTimeInterval b = [date2 timeIntervalSince1970];
4)timeIntervalSinceNow属性:返回date对象距离当前时间的秒数。
说明:
如果date对象的时间大于当前时间,返回的秒数为正数。
格式:
@property(readonly) NSTimeInterval timeIntervalSinceNow
eg:
NSDate *date = [NSDate date];
NSTimeInterval b2 = [date timeIntervalSinceNow];
NSLog(@"%f",b2);
5)
16】NSDateFormatter日期格式类型
说明:
用于对NSDate时间数据进行转换和格式化。
常用方法/函数:
1)初始化
eg:
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
2)dateFormat属性:给日期字符串指定日期时间格式。
说明:
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
eg:
// 日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter.dateFormat = @"yy-MM-dd HH:mm:ss";
2)stringFromDate方法:字符串转换为时间对象。
格式:
- (NSString *)stringFromDate:(NSDate *)date
eg:
// 要在手机上显示时间,需要将时间转换为字符串。
// 日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter.dateFormat = @"yy-MM-dd HH:mm:ss";
NSString *str8 = [formatter stringFromDate:date];
NSLog(@"%@",date); //显示格林尼治时间
NSLog(@"%@",str8); //显示为北京时间,并符合设置的格式。
3)dateFromString方法:时间对象转化为字符串对象。
格式:
- (NSDate *)dateFromString:(NSString *)string
eg:
// 字符串时间转换为时间
NSString *str9 = @"2015/4/5 2:34";
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter1.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date4 = [formatter1 dateFromString:str9];
NSLog(@"%@",date4); //NSDate类型输出的格林尼治时间,与北京时间差8小时。
0】框架使用注意点汇总
1)使用CG开头的函数需要添加框架:CoreGraphics框架
2)Foundation框架里面的东西一般都以NS开头。
3)OC中不允许直接修改对象的结构体属性的成员。但允许直接修改对象的结构体属性。
eg:
self.head.frame.origin.y = self.head.frame.origin.y - 10; // 错误,不能直接修改y值。
CGRect tempFrame = self.head.frame; // 间接方式修改属性值,这样就对了
tempFrame.origin.y -= 10;
self. head.frame = tempFrame;
1】NSRange 范围类型
定义:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
赋值:
NSRange r1 = {2, 4}; //不用这种方式
NSRange r2 = {.location = 2, .length = 4}; //不用这种方式
NSRange r3 = NSMakeRange(2,4); //建议采用这种方式赋值。
常用方法/函数:
1)NSMakeRange 给NSRange赋值
eg:NSRange r3 = NSMakeRange(2,4); //建议采用这种方式赋值。
2】NSString 字符串类型(不可变字符串)
定义变量:
NSString *s = @"abc";
常用方法/函数:
1)rangeOfString方法: 查找某个字符串在str中的范围。
如果找不到,length=0,location = NSNotFound(其值为-1,用%d输出是-1,用%ld输出是9223371……一串很长的数字,这是因为符号位与非符号位造成的)。
eg: NSRange range = [str rangeOfString:@"java"];
2)NSStringFromPoint函数 将某个点转换为字符串
3)stringWithFormat方法 返回格式化后的字符串
格式:[NSString stringWithFormat:(NSString *), ...]
eg:NSString *s = [NSString stringWithFormat:@"age is %d",43];
4) initWithFormat方法 返回初始化的字符串
格式:[[NSString alloc] initWithFormat:(NSString *)]
eg:NSString *s1 = [[NSString alloc] initWithFormat:@"%d",44];
5)initWithUTF8String方法:C语言字符串转换为NSString字符串
格式:[NSString alloc] initWithUTF8String:(const char *)
eg:NSString *s1 = [[NSString alloc] initWithUTF8String:"abc"];
6)UTF8String方法 :NSString字符串转变为C语言的字符串。
eg:const char *ss2 = [s1 UTF8String];
7)initWithContentsOfFile方法 从本地文件中读取数据初始化NSString字符串
格式:
initWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)
说明:
(NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编码:NSUTF8StringEncoding
eg:
NSString *s3 = [[NSString alloc] initWithContentsOfFile:@"/Users/liugang/临时资料/001.txt" encoding:NSUTF8StringEncoding
error:nil];
注意:该方法的路径字符串可以含有中文。
8)initWithContentsOfURL方法 从URl指定的文件中读取数据初始化NSString字符串。
格式:
initWithContentsOfURL:(NSURL *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)
说明:(NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/临时资料/001.txt"];
[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
9)writeToFile方法 :将NSString字符串写入文件,文件路径只能使用本地路径
格式:[@"agb" writeToFile:(NSString *) atomically:(BOOL) encoding:(NSStringEncoding) error:<#(NSError *__autoreleasing
*)#>]
说明:
@""中是英文的时候才能自动带出writeToFile函数。
atomically:YE
1b5d7
S,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。
要对写入的字符串进行换行,在字符串中加入"\n"。
eg:
[@"I love you" writeToFile:@"/Users/liugang/临时资料/003.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
10)writeToURL方法:将NSString字符串写入文件,文件路径使用URL路径
格式:
[s3 writeToURL:(NSURL *) atomically:(BOOL) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)]
说明:
atomically:YES,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。
要对写入的字符串进行换行,在字符串中加入"\n"。
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
NSString *s3 = @"i love you";
[s3 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]
11)stringByAppendingString方法:对NSString字符串后附加字符串并返回新字符串的指针。
格式:
[s2 stringByAppendingString:(NSString *)];
说明:
从这里可以看出可变字符串与不可变字符串之间的区别。
eg:
NSString *s2 =[NSString stringWithFormat:@"I am liugang"];
NSString *s3 = [s2 stringByAppendingString:@" too"];
12)pathExtension属性:扩展的路径(如果有的话)的字符串作为解读为路径。(只读)
说明:
返回该路径中文件的扩展名,注意"."并不属于扩展名内。
格式:
@property(readonly, copy) NSString *pathExtension
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
13)lowercaseString属性:一个字符串的小写字母表示。
格式:
@property(readonly, copy) NSString *lowercaseString
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
14)isEqualToString方法:返回一个布尔值表明一个给定字符串是否等于接收的文字,基于unicode的比较。
格式:
- (BOOL)isEqualToString:(NSString *)aString
说明:
相等返回YES,不相等返回NO
eg:
NSString *extension = [[path pathExtension] lowercaseString];
if ([extension isEqualToString:@"h"] || [extension isEqualToString:@"m"] || [extension isEqualToString:@"c"])
{
//NSLog(@"不是文件夹");
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [content componentsSeparatedByString:@"\n"];
//输出每一行的数据
// [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// NSLog(@"第%ld行:%@",idx,obj);
// }];
return array.count;
}
15)intValue属性:将OC字符串类型转换为其对应的数值。
格式:
@property(readonly) int intValue
eg:
NSString *str2 = [NSString stringWithFormat:@"100"];
NSLog(@"%d",[str2 intValue]); //输出100
2】NSMutableString 可变字符串类型
说明:
NSMutableString继承NSString,所以所有的NSString方法都能用在NSMutableString类上。
常用方法/函数:
1) appendString方法:对NSMutableString字符串进行扩充,在原字符串的尾部增加字符串。
格式:
[s1 appendString:(NSString *)]
eg:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
[s1 appendString:@"wenjing"];
2)deleteCharactersInRange方法:对NSMutableString字符串删除对应范围的字符
格式:
[s1 deleteCharactersInRange:(NSRange)]
eg:
NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
NSRange r1 = [s1 rangeOfString:@"you"];
[s1 deleteCharactersInRange:r1];
3】NSURL 资源路径类型
说明:URL,资源路径 ;
格式:
“协议头://路径”
eg:file:// ; ftp:// ; http://weibo.com/a.png;
常用方法/函数:
1)initWithString 初始化赋值NSURL对象。
eg:NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
注意:
使用该方法的路径字符串中不要含有中文。
4】NSPoint\CGPoint 点类型
说明:
两个是等价的,但CGPoint具有跨平台性。
表示一个点。
常用方法/函数:
1)NSMakePoint/CGPointMake函数: 给NSPoint\CGPoint赋值
NSPoint p1 = NSMakePoint(10,20);
CGPoint p2 = CGPointMake(30,20); //最常用
或:
CGPoint p1 = NSMakePoint(10,20);
NSPoint p2 = CGPointMake(30,20); //最常用
5】NSSize\CGSize 描述大小的类型
说明:
表示一个矩形区域大小,一般用来描述一个UI的大小
两个是等价的,但CGSize具有跨平台性。
常用方法/函数:
1)NSMakeSize/CGSizeMake函数: 赋值
NSSzie s1 = NSMakeSize(10,20);
CGSzie s2 = CGSzieMake(40,50);
2)CGSizeEqualToRect函数: 比较
6】NSRect\CGRect 表示矩形的类型
说明:
描述一个矩形大小以及位置,拥有x,y值以及宽和高。
用NSLog输出时,不能用%@直接输出,要用NSStringFromCGRect(CGRect rect)函数转化为字符串进行输出。
常用方法/函数:
1)NSMakeRect/CGRectMake函数: 赋值函数
NSRect = NSMakeRect(0,0,10,30);
CGRect = CGRectMake(0,0,20,30);
2)CGRectEqualToRect函数: 比较函数
3)CGRectContainsPoint函数: 判断某个点是否在某个矩形区域
7】NSArray数组类型(不可变数组)
说明:
1、利用C语言形式的数组建立的数组,只能放一种类型的数据。
2、OC不能放基本数据类型、非OC对象,只能存放OC对象。
3、OC数组是不能存放nil值。
4、直接用%@输出NSArray数组时会把数组中所有项全部输出。
常用方法/函数:
1)array方法:创建一个空的OC数组。
eg:
NSArray *array = [NSArray array]; //这个array永远是一个空数组。
2)arrayWithObjcet:创建并返回一个数组,其中包含一个给定的对象。
eg:
NSArray *array = [NSArray arrayWithObject:@"abc"];
3)arrayWithObjcets:创建并返回一个数组,其中含有多个给定的对象。
格式:
[NSArray arrayWithObjects:(id), ..., nil]
说明:
1)nil是数组的结束标示。
2)不允许写多个nil,只能在最后加一个nil。
eg:
NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
4)count:返回数组元素的个数。
格式:
@property(readonly) NSUInteger count
eg:
NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
int x = [array count];
5)objectAtIndex:返回位于指定索引的对象。
格式:
- (id)objectAtIndex:(NSUInteger)index
说明:
数组中第一个元素的下标索引值为0;
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",[array objectAtIndex:0]);
6)“[”“]”:编译器特性,快速访问数组NSArray元素。
说明:
编译器遇到[]类型的代码会自动转换为objectAtIndex形式。
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",array[0]);
7)快速创建多个元素的OC对象数组,这个也是编译器特性。
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSArray *array1 = @[@"123",@"abc",@"432"]; //和上面是等价的。
8)遍历OC对象数组。
eg:
NSArray *array = @[@"123",@"abc",@"432"];
//方法一
for (int i = 0; i < array.count; i++) {
NSLog(@"%d-%@",i,array[i]);
}
//方法二
for (id i in array)
{
NSUInteger x = [array indexOfObject:i];
NSLog(@"%ld-%@",x,i);
}
//方法三
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//每遍历到一个元素,就会调用一次block
//并且当前元素和索引位置当做参数传给block
//给*stop赋值"YES"或"NO",来继续遍历或停止遍历。
NSLog(@"%ld-%@",idx,obj);
}];
9)indexOfObject:返回与参数传入的数组元素相等的元素的索引下标
格式:
- (NSUInteger)indexOfObject:(id)anObject
eg:
for (id i in array)
{
NSUInteger x = [array indexOfObject:i];
NSLog(@"%ld-%@",x,i);
}
10)enumerateObjectsUsingBlock:利用块模块遍历数组
说明:
执行一个给定的块用于数组中的每个对象,从第一个对象,并继续通过数组最后一个对象。
如果块参数等于零这个方法将引发一个异常。值分配块内块执行后将被收回。使用保留显式地维护这些值。
格式:
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
eg:
NSArray *array = @[@"123",@"abc",@"432"];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
//每遍历到一个元素,就会调用一次block
//并且当前元素和索引位置当做参数传给block
//给*stop赋值"YES"或"NO",来停止遍历或继续遍历。
NSLog(@"%ld-%@",idx,obj);
if(idx == 1)
{ *stop = YES;} //停止遍历
}];
11)componentsSeparatedByString:返回一个数组,其中包含来自接收者的子字符串,用一个给定的分隔符进行分割。
格式:
- (NSArray *)componentsSeparatedByString:(NSString *)separator
eg:
int codeLineCount(NSString *path)
{
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//以“\n”分割字符串
NSArray *array = [content componentsSeparatedByString:@"\n"];
//变量该array数组。
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第%d行:%@",idx,obj);
}];
return array.count;
}
12)高级应用。
eg:
1)数组中的元素对象为字典对象。
NSArray * array3 = @[
@{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"},
@{@"1":@"bbb",@"2":@"ccc"},
@{@"1":@"ccc",@"2":@"bbb"}
];
// NSDictionary *dict6 = array3[1];
NSLog(@"%@",array3[1][@"1"]);
7】NSMutableArray数组类型(可变数组)
说明:
1)NSArray的子类。NSArray创建好的数组,后面不能改变数组的大小,而NSMutableArray数组可以。
2)NSArray的方法都可用在NSMutableArray上。
3)NSMutableArray不能用“@[]”形式来初始化数组,这种形式只能用于NSArray数组。
常用方法/函数:
1)addObject:在数组中插入一个对象。
格式:
- (void)addObject:(id)anObject
eg:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"123", @"agb", nil];
[array addObject:@"456"];
2)removeObject:删除数组中与给定对象相等的数组元素
格式:
- (void)removeObject:(id)anObject
3)removeAllObjects:清空数组的所有元素。
格式:
- (void)removeAllObjects
4)removeObjectAtIndex:删除指定索引位置的元素
格式:
- (void)removeObjectAtIndex:(NSUInteger)index
说明:
删除前面的某个元素,后面的元素会依次往前移动一位。即后面元素的索引值均减1。
5)removeLastObject:删除数组的最后一个元素。
格式:
- (void)removeLastObject
8】NSFileManager文件管理器类型
说明:
一个NSFileManager对象允许您检查的文件系统的内容并对其进行更改。一个文件管理器对象通常是第一个与文件系统的交互。你用它来定位,创建、复制和移动文件和目录。您还可以使用它来获得一个文件或目录的信息或改变它的一些属性。
常用方法/函数:
1)defaultManager:返回程序的共享文件管理器对象
格式:
+ (NSFileManager *)defaultManager
eg:
NSFileManager *mgr = [NSFileManager defaultManager];
2)fileExistsAtPath: isDirectory::检测文件路径是否存在,并检测是否为文件夹
说明:
返回一个布尔值,指示在指定的路径文件或目录是否存在。isDirectory参数表示的路径是否指向一个目录或一个常规文件。
格式:
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory
eg:
//获得文件的管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//判断path是否存在,如果不存在直接返回0
BOOL dir = NO; //标记是否为文件夹
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
if (!exist) {
NSLog(@"该文件路径不存在!");
return 0;
}
if (dir) {
NSLog(@"为文件夹!");
}
else
{
NSLog(@"不是文件夹");
}
3)contentsOfDirectoryAtPath:path error:nil:返回指定路径下包含的文件或文件夹的名称。
格式:
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
eg:
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
9】NSSet:定义一个无序的集合对象。(不可变)
说明:
类声明一个无序的集合对象。只能存放oc对象,不存基本数据类型(int、float、double、char、struct、enum等)。
常用方法/函数:
1)set:创建并返回一个空集。
格式:
+ (instancetype)set
说明:
该方法主要用在可变NSMutableSet上。
eg:
NSSet *s = [NSSet set];
2)setWithObjects:创建并返回一个包含列表中对象的set集合。
格式:
+ (instancetype)setWithObjects:(id)firstObj, firstObj, ...
eg:
NSSet *s2 = [NSSet setWithObjects:@"123", @"abc", nil];
3)anyObject:返回set集合中的一个对象
说明:
如果set为空,返回的对象为nil;
格式:
- (id)anyObject
10】NSMutableSet:定义一个可变的无序的集合对象。
说明:
NSMutableSet为NSSet的子类。
NSSet的方法,NSMutableSet都能使用。
常用方法/函数:
1)addObject:增加对象。
格式:
- (void)addObject:(id)object
eg:
NSMutableSet *s3 = [NSMutableSet set];
[s3 addObject:@"123"];
[s3 removeObject:@"123"];
2)removeObject:删除对象
格式:
- (void)removeObject:(id)object
11】NSDictionary字典类型(不可变)
说明:
字典对象运行有相同的objcet,但不允许有相同的key。
字典是无序的。
常用方法/函数:
1)dictionary方法:创建并返回一个空的NSDictionary对象
说明:
该方法一般用在可变字典类型上。
格式:
+ (instancetype)dictionary
2)dictionaryWithObject: forKey:方法:创建并返回包含一个键和值得字典对象。
说明:
格式:
+ (instancetype)dictionaryWithObject:(id)anObject forKey:(id<NSCopying>)aKey
eg:
NSDictionary *dict = [NSDictionary dictionary];
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"agbcde" forKey:@"01"];
3)dictionaryWithObjects: forKeys: 方法:用数组创建含多个元素的字典对象
格式:
+ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
eg:
NSArray *keys = @[@"1",@"2",@"3"];
NSArray *objects = @[@"aaa",@"bb",@"ccc"];
NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
4)"@{}"机制:oc编译机制快速方便创建字典对象
eg:
NSDictionary *dict4 = @{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"};
说明:
":"前面的为键值,后面的为字典内容。
5)+ (instancetype)dictionaryWithObjectsAndKeys方法:创建并返回一个字典条目,来自指定的一组值和键。
格式:
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
6)count属性:返回字典中条目(键值对)的数量。
格式:
@property(readonly) NSUInteger count
eg:
NSLog(@"%d",dict5.count);
7)allKeys属性:返回一个数组包含所有的key值。
说明:
如果一个key值没有,数组allKeys为空。
格式:
@property(readonly, copy) NSArray *allKeys
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
NSArray *array = [dict5 allKeys];
8)"[ ]"机制:快速取字典对象中的key对应的object
eg:
NSDictionary *dict4 = @{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"};
NSString *object = dict5[@"1"];
9)enumerateKeysAndObjectsUsingBlock方法:利用block遍历字典对象。
说明:
stop用来传递是否停止遍历的参数,YES表示停止。
格式:
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block
eg:
NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:
@"aaa",@"1",
@"bbb",@"2",
@"ccc",@"3", nil];
//笨得传统遍历方式
NSArray *array3 = dict5.allKeys;
for (int i = 0; i < array3.count; i++)
{
NSString *key = array3[i];
NSString *object = dict5[key];
NSLog(@"%@-%@",key,object);
}
//利用block遍历字典对象
[dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@--%@",key,obj);
}];
12】NSMutableDictionary字典类型(不可变)
说明:
字典条目可以增加减少。
不能用"@{}"机制对NSMutableDictionary进行初始化,因为“@{}”只能用在不可变字典类型。
NSMutableDictionary是NSDictionary的子类。
常用方法/函数:
1)dictionary方法:创建并返回一个空的NSDictionary对象
说明:
该方法一般用在可变字典类型上。
格式:
+ (instancetype)dictionary
2)setObject: forKey:方法:增加字典条目。
说明:
若新增加的key值已经存在,将会用新增加的object值替换原有的。
格式:
- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey
eg:
NSMutableDictionary *dict6 = [NSMutableDictionary dictionary];
[dict6 setObject:@"aaaa" forKey:@"1"];
[dict6 setObject:@"bbbb" forKey:@"2"];
[dict6 setObject:@"cccc" forKey:@"3"];
3)removeObjectForKey方法:删除对应key值的字典条目。
格式:
- (void)removeObjectForKey:(id)aKey
eg:
NSMutableDictionary *dict6 = [NSMutableDictionary dictionary];
[dict6 setObject:@"aaaa" forKey:@"1"];
[dict6 setObject:@"bbbb" forKey:@"2"];
[dict6 setObject:@"cccc" forKey:@"3"];
[dict6 removeObjectForKey:@"2"];
13】NSNumber类型:将c语言的基本数据类型中的数值型(int,float,double,char)转换为OC对象。
说明:
NSArray、NSDictionary等OC类型对象只能存储OC对象,对于基本数据类型的存储,需要使用NSNumber转换为OC对象才能去存储。
NSNumber之所能包装基本类型,是因为继承了NSValue,NSValue才是包装进行数据转换万能的。
常用方法/函数:
1)@(value)、@4、@'a'机制:编译器特性,将基本数据类型快速转变为OC对象的方法
说明:
对于变量使用时,需要加上"()"代表取变量的值再进行转换。
eg:
NSArray *array8 = @[@4,@'a',@"agb"];
2)numberWithInt方法:将int类型数据转换为Number对象。
格式:
+ (NSNumber *)numberWithInt:(int)value
eg:
NSNumber *x = [NSNumber numberWithInt:2 ];
3)intValue属性:将Number对象转化为int类型数据。
格式:
@property(readonly) int intValue
eg:
1) NSNumber *x = [NSNumber numberWithInt:2 ];
int
xx = [x intValue];
2) NSLog("%d",[@"20" intValue]);
4)numberWithFloat方法:将float类型数据转换为Number对象。
格式:
+ (NSNumber *)numberWithFloat:(float)value
5)floatValue属性:将Number对象转化为float类型数据。
格式:
@property(readonly) float floatValue
14】NSValue:包装各类数据类型
说明:
一个NSValue对象是一个简单的容器一个C或objective - C数据项。它可以容纳任何标量类型如int、浮动,char,指针,结构和对象id引用。使用这个类来处理这样的数据类型集合(如NSArray和NSSet)键值编码,和其他api需要objective
- c的对象。NSValue对象总是不变的。
常用方法/函数:
1)valueWithPoint方法:将结构体point转换为NS类OC对象
说明:
格式:
+ (NSValue *)valueWithPoint:(NSPoint)aPoint
eg:
//包装结构体
CGPoint p = CGPointMake(10, 20);
NSValue *v = [NSValue valueWithPoint:p]; // 将结构体点转换为OC对象Value类型
NSArray *array9 = @[v];
p = [v pointValue]; // 将Value类型转换为结构体点类型。
2)pointValue属性:返回Point类型的值
说明:
格式:
@property(readonly) NSPoint pointValue
eg:
CGPoint p = CGPointMake(10, 20);
NSValue *v = [NSValue valueWithPoint:p]; // 将结构体点转换为OC对象Value类型
NSArray *array9 = @[v];
p = [v pointValue]; // 将Value类型转换为结构体点类型。
15】NSDate日期类型
说明:
用于对日期时间的表示,最小单位一般用秒。
常用方法/函数:
1)date类方法:创建并返回一个新的日期设置为当前日期和时间。
说明:
注意设置的日期时间为格林尼治时间,与北京时间差8小时。
格式:
+ (instancetype)date
eg:
NSDate *date = [NSDate date];
NSLog(@"%@",date);
2)dateWithTimeInterval: sinceDate:方法:返回一个从指定时间晚多少秒的时间。
格式:
+ (instancetype)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date
说明:
seconds :晚的秒数。
eg:
NSDate *date = [NSDate date];
NSLog(@"%@",date);
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
3)timeIntervalSince1970属性:返回距离1970-1-1 00:00:00已经走过的秒数。
说明:
返回的类型为 NSTimeInterval,实际该类型的原型为double类型。
格式:
@property(readonly) NSTimeInterval timeIntervalSince1970
eg:
NSDate *date = [NSDate date];
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
NSTimeInterval b = [date2 timeIntervalSince1970];
4)timeIntervalSinceNow属性:返回date对象距离当前时间的秒数。
说明:
如果date对象的时间大于当前时间,返回的秒数为正数。
格式:
@property(readonly) NSTimeInterval timeIntervalSinceNow
eg:
NSDate *date = [NSDate date];
NSTimeInterval b2 = [date timeIntervalSinceNow];
NSLog(@"%f",b2);
5)
16】NSDateFormatter日期格式类型
说明:
用于对NSDate时间数据进行转换和格式化。
常用方法/函数:
1)初始化
eg:
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
2)dateFormat属性:给日期字符串指定日期时间格式。
说明:
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
eg:
// 日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter.dateFormat = @"yy-MM-dd HH:mm:ss";
2)stringFromDate方法:字符串转换为时间对象。
格式:
- (NSString *)stringFromDate:(NSDate *)date
eg:
// 要在手机上显示时间,需要将时间转换为字符串。
// 日期格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter.dateFormat = @"yy-MM-dd HH:mm:ss";
NSString *str8 = [formatter stringFromDate:date];
NSLog(@"%@",date); //显示格林尼治时间
NSLog(@"%@",str8); //显示为北京时间,并符合设置的格式。
3)dateFromString方法:时间对象转化为字符串对象。
格式:
- (NSDate *)dateFromString:(NSString *)string
eg:
// 字符串时间转换为时间
NSString *str9 = @"2015/4/5 2:34";
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
// y 年 M 月 d 日 H(24)h(12) 时 m 分 s 秒
formatter1.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date4 = [formatter1 dateFromString:str9];
NSLog(@"%@",date4); //NSDate类型输出的格林尼治时间,与北京时间差8小时。
相关文章推荐
- 只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!
- Open Source Foundation
- nsvalue与nsnumber
- Foundation
- object引用Foundation头文件
- 黑马程序员IOS-OC语言-Foundation-结构体
- 黑马程序员_Foundation框架基础知识(二)集合类
- 黑马程序员_Foundation框架基础知识(三)-常用类
- 黑马程序员——Foundation框架:结构体及字符串之NSString
- 黑马程序员——Foundation框架:字符串之集合类
- 文章标题
- 黑马程序员——入学Blog10----Foundation框架常用的结构体与类
- 黑马程序员-ios学习笔记 Foundation 中的 NSString
- IOS开发系列—Objective-C之Foundation框架(一)
- [Foundation] NSArray、NSDictionary历遍方法
- [Foundation] 简写代码 string literal
- Objective C Foundation框架(NSNumber)
- 常见框架
- Foundation-NSString类
- Foundation框架学习(一)NSString