黑马程序员——OC学习之Foundation框架常用类的常用方法

来源:互联网 发布:学it有前途吗 编辑:程序博客网 时间:2024/05/16 07:50

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


Foundation框架中常用对象有

一.常用结构体

NSRange(location length)       //表示范围

NSPoint\CGPoint                        //表示坐标

NSSize\CGSize、                       //表示大小

NSRect\CGRect                         //表示位置和尺寸

二.oc字符串对象NSString和它的可变大小的子类NSMutableString;

三.oc集合类NSArray,NSSet,NSDictionary以及它们的可变大小的子类NSMutableArray, NSMutableSet, NSMutableDictionary;

四.还有NSNumber,NSValue,NSDate这几个。

下面一个一个介绍它们的常用方法。

一.常用结构体

1.NSRange:用来表示范围

typedefstruct _NSRange {

      NSUIntegerlocation;            //表示起始位置

      NSUIntegerlength;        //表示长度

} NSRange;

创建一个对象:NSRange range = NSMakeRange(10, 5);它不是对象,因此是使用c语言的方式通过函数创建而非通过类的方法,该对象可以用在表示字符串中的一段范围的字符上。

2.NSPoint\CGPoint:表示一个点坐标

typedefstruct _NSPoint {

      CGFloatx;

      CGFloaty;

} NSPoint;

structCGPoint {

   CGFloatx;

   CGFloaty;

};

typedef struct CGPointCGPoint;

可以看出NSPoint\CGPoint是一样的,只是属于不同的框架,NSPoint是Foundation框架内容,CGPoint是CoreGraphics框架的内容,由于CGPoint有跨平台的特性,因此用得更多,以下的几个结构体也是如此。

创建方法:

CGPoint p1 = NSMakePoint(10, 10);

NSPoint p2 = CGPointMake(20, 20); //更加通用。

3. NSSize\CGSize:表示尺寸大小

structCGSize {

   CGFloatwidth;

   CGFloatheight;

};

typedef struct CGSizeCGSize;

创建方法;

CGSize s1 = CGSizeMake(10, 10);

NSSize s2 = NSMakeSize(20, 20);

4. NSRect\CGRect                //表示位置和尺寸

typedefstruct _NSRect {

      NSPointorigin;

      NSSizesize;

} NSRect;

structCGRect {

   CGPointorigin;

   CGSizesize;

};

typedef struct CGRectCGRect;

创建方法:

NSRect r1 = NSMakeRect(0, 0, 10, 10);

CGRect r2 = CGRectMake(10,10,20,20);

如上是通过函数创建,也可以通过如下方式创建:

NSRange range2 = {10,10};

CGPoint p3 = {30,30};

CGSize s3 = {30,30};

CGRect r3 = {0,0,10,10};

CGRect r4 = {{0,0},{10,10}};

CGRect r5 ={p1,s1};
   

CGRect r6 = {CGPointZero,CGSizeMake(10,10)}; //CGPointZero就表示(00)坐标原点

但是这种方式意义不太明确,不建议使用。

 

二.oc字符串对象NSString和它的可变大小的子类NSMutableString;

NSString一旦创建了就不可改变,无论是长度还是内容,NSMutableString则可以改变其长度和内容。

创建方法:

NSString *str1 = @"Hello World”;

NSString *str2 = [[NSStringalloc]initWithString:@"haha"];

NSString *str3 = [[NSStringalloc]initWithFormat:@"age = %d",13];

从c字符串创建oc对象字符串

NSString *str4 = [[NSStringalloc]initWithUTF8String:"C字符串!"];

oc转c字符串

constchar *chars= [str4 UTF8String];


//还可以从文件读取,并创建字符串

NSString *str5 = @"/Users/apple/Desktop/1.txt";

NSString *str6 = [[NSStringalloc]initWithContentsOfFile:str5encoding:NSUTF8StringEncodingerror:nil];

//将字符串转换为URL地址

NSURL *url = [[NSURLalloc]initWithString:@"file:///Users/apple/Desktop/1.txt"];

NSURL *url2 = [NSURLfileURLWithPath:@"/Users/apple/Desktop/1.txt"];

//从URL读取内容,并创建新的字符串str7

NSString *str7 = [[NSStringalloc]initWithContentsOfURL:urlencoding:NSUTF8StringEncodingerror:nil];


NSString创建字符串的方法十分多,可以从各种基本数据类型转换而来,也可以从结构体转而来,还能读取各种URL地址和文件的资源得到,其方法大多以init开头。

 

把字符串写入到文件或者URL地址中

//把字符串写入到文件

NSString *path = @"/Users/apple/Desktop/a.txt";

[@"apple \n black" writeToFile:path atomically:YESencoding:NSUTF8StringEncoding error:nil];

//把字符串写入到URL

NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/a.txt"];

[@"good" writeToURL:url atomically:YESencoding:NSUTF8StringEncoding error:nil];

 

字符串剪切:

-(NSString *)substringFromIndex:(NSUInteger)from;从指定index处剪切字符串到末尾,包含index处字符

-(NSString *)substringToIndex:(NSUInteger)to;从开始处剪切字符串到index处,不包含index处字符

- (NSString *)substringWithRange:(NSRange)range;根据传递的范围截取字符串。 

 

字符串拼接:

NSString *str2 = [str1 stringByAppendingString:str3];


分割字符串:

NSArray *arr1 = [str2 componentsSeparatedByString:@"_"];用指定字符串分割目标字符串。

NSArray *arr2 = [str2componentsSeparatedByCharactersInSet:(NSCharacterSet *)]; //用指定字符集分割字符串

 

获取单个字符:

unichar c = [str2 characterAtIndex:1];


比较字符串:

NSComparisonResult result1 = [str2caseInsensitiveCompare:str3];

NSComparisonResult result2 = [str2compare:str3options:NSLiteralSearchrange:NSMakeRange(0,5)locale:nil];

其中NSComparisonResult是枚举

enum{

   NSOrderedAscending= -1,

   NSOrderedSame,

   NSOrderedDescending

};

除此之外还有许多is开头的方法如:isEqual: isGreaterThan: 等等也可以用于比较,返回的是bool类型,不再是NSComparisonResult类型。

如上是NSString对象的基本方法,NSMutableSting是其子类,包含它的所有方法还有自己的方法:

NSMutableString *mstr1 =[[NSMutableStringalloc]initWithString:@"abc"];

[mstr1 appendString:@"123"]; //最后面添加字符串

[mstr1 deleteCharactersInRange:NSMakeRange(0,3)];//删除指定范围的字符串

[mstr1 insertString:@"xyz"atIndex:1];//再指定位置插入字符串。

 

字符串的函数特别多,也都十分实用,但是如上几个是常用字符串,掌握这些就能应付基本的字符操作了。


三.oc集合类NSArray,NSSet,NSDictionary以及它们的可变大小的子类NSMutableArray, NSMutableSet, NSMutableDictionary

这些oc集合类只能存放oc对象,不能存放基本数据类型和结构体,共用体

1.NSArray是有序不可变集合

NSArray的常用方法:

+(id)arrayWithObjects:obj1,obj2,...nil             //创建一个新的数组,obj1,obj2,.., 以nil结束。+ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)count//在对象数组中选取前count个对象元素组成NSArray对象。-(BOOL)containsObject:obj                          //确定数组中是否包含对象obj-(NSUInterger)count                                //数组中元素的个数-(NSUInterger)indexOfObject:obj                    //第一个包含obj元素的索引号-(id)ObjectAtIndex:i                               //存储在位置i的对象

快速创建对象一般使用:

NSArray *arr = @[@1,@2,@3]; //oc的编译器特性。

NSMutableArray是NSArray的子类,可以动态增加元素,常用方法:

+(id)array                                    //创建一个空数组+(id)arrayWithCapacity:size                   //创建一个容量为size的数组-(id)initWithCapacity:size                    //初始化一个新分配的数,指定容量为size-(void)addObject:obj                          //将obj增加到数组中-(void)insertObject:obj atIndex:i             //将obj插入数据的i元素-(void)replaceObjectAtIndex:i withObject:obj  //用obj替换第i个索引的对象-(void)removeObject:obj                       //从数组中删除所有是obj的对象-(void)removeObjectAtIndex:i                  //从数组中删除索引为i的对象-(void)sortUsingSelector:(SEL)selector        //用selector指示的比较方法进行排序

2. NSSet是无序不可变集合

NSSet的常用方法:

+(id)setWithObjects:obj1,obj2,obj3,...nil   //使用一组对象创建新集合-(id)initWithObjects:obj1,obj2,...nil       //使用一组对象初始化新分配的集合-(NSUInterger)count                         //返回集合的成员个数-(BOOL)containsObject:obj                   //确定集合是否包含对象obj-(BOOL)member:obj                           //确定集合是否包含对象obj-(BOOL)isSubsetOfSet:nsset                  //判断是否是一个集合nsset的子集-(BOO)isEqualToSet:nsset                    //判断两个集合是相等

NSMutableSet常用方法:

+(id)setWithCapacity:size//类方法,返回一个给定容量的NSMutableSet集合-(id)initWithCapacity:size//对象方法,返回一个给定容量的NSMutableSet集合-(void)addObject:obj        //增加一个对象到集合中-(void)removeObject:obj     //从集合中删除对象obj-(void)removeAllObjects     //删除集合中所有的对象

3. NSDictionary是oc中的键值对集合,对应java中的map。

NSDictionary常用方法:

+(id)dictionaryWithObjectsAndKeys: obj1,key1,obj2,key2,...nil      //顺序增加对象和键值来创建一个字典。-(id)initWithObjectsAndKeys:obj1,key1,obj2,key2,...nil  //初始化一个新分配的字典,顺序增加对象和值-(unsigned int)count                                    //返回字典中键值对数-(id)objectForKey:key                                   //返回指定key的值

快速创建一般使用:

NSDictionary *dic = @{@1:@"a",@2:@"b",@3:@"c"};   //oc的编译器特性。

NSMutableDictionary常用方法:

+(id)dictionaryWithCapacity:size    //创建一个size大小的可变字典-(id)initWithCapacity:size          //初始化一个size大小的可变字典-(void)removeAllObjects             //删除字典中所有元素-(void)removeObjectForKey:key       //删除字典key位置的元素-(void)setObject:obj forKey:key     //增加(obj,key)到字典中,若key已经存在,则替换值为obj

如上是对三大集合的基本操作方法的小结,下面开始学如何遍历这些集合元素:

a.通过for循环遍历NSArrayNSDictionary

NSArray *arr = @[@1,@2,@3];for(int i = 0;i < arr.count;i++){        NSLog(@"%@",arr[i]);    }NSDictionary *dic = @{@1:@"a",@2:@"b",@3:@"c"};NSArray *keys = [dic allKeys];//获得所有key的集合for(int i = 0;i < dic.count;i++){        NSLog(@"%@,%@",keys[i],[dic objectForKey:keys[i]]);}

b.使用block代码块遍历NSArrayNSDictionary:

NSArray *arr = @[@1,@2,@3];[arr enumerateObjectsUsingBlock:    ^(id obj, NSUInteger idx, BOOL *stop) {        NSLog(@"index = %ld,obj = %@",idx,obj);}];NSDictionary *dic = @{@1:@"a",@2:@"b",@3:@"c"};[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {        NSLog(@"key = %@,obj = %@",key,obj);}];


四.NSNumber,NSValue,NSDate

集合对象可以存放oc对象,但是基本数据类型,结构体,枚举,共用体则无法存放,基本数据类型可以通过转换成NSNumber*类型存放在集合中。

1.基本数据类型转换成NSNumber:

NSNumber *age = [NSNumbernumberWithInt:15];

或者 NSNumber *age = @16;     //推荐写法。

其它基本数据类型也是这么转。

方法有如下:



2. NSNumber转换成基本数据类型:

int age2 = [age1 intValue];

或者 int age3 = age1.intValue;

其它基本数据类型也可以这么转:


3.如果要将结构体转换成可以存放在oc集合中的对象可以使用NSValue,NSValue是NSNumber的父类

以下分别是NSRange,NSPoint,NSSize,NSRect在结构体和oc对象之间转换的方式。

NSValue *rangeValue = [NSValue valueWithRange:NSMakeRange(10, 10)];NSRange range = [rangeValue rangeValue];NSValue *pointValue = [NSValue valueWithPoint:CGPointMake(10, 10)];CGPoint point = [pointValue pointValue];NSValue *sizeValue = [NSValue valueWithSize:CGSizeMake(10, 10)];CGSize size = [sizeValue sizeValue];    NSValue *rectValue = [NSValue valueWithRect:CGRectMake(0, 0, 10, 10)];CGRect rect = [rectValue rectValue];

4.NSDate是用来表示日期格式的对象,对于输出我们想要的日期格式十分方便。

使用示例如下:

创建一个日期对象

NSDate *date1 = [NSDate date];//当前时间NSDate *date2 = [[NSDate alloc] init];//当前时间NSDate *date3 = [NSDate dateWithTimeInterval:60*60*24 sinceDate:date1]; //date3比date1晚一天,中间的时间参数单位是秒,不是毫秒!

要格式化日期输出还需要一个NSDateFormatter对象

NSDateFormatter *format = [[NSDateFormatter alloc] init];format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //设置成想要的格式NSLog(@"%@",[format stringFromDate:date1]); //将日期按照设定的格式输出。

也可以将字符串按照给定的格式转换成日期对象

NSString *strdate1 = @"1992-01-01 23:01:01";NSDate *date5 = [format dateFromString:strdate1];










0 0