前言:Cocoa中Foundation框架的介绍
Foundation框架只是Cocoa的一部分,并且没有内置到Objective-C中,但是他还是非常重要的。Cocoa实际上是由很多不同框架组成的,在IOS平台上开发程序,那么你将会用到User Interface Kit(UIKit框架)。Foundation是UI框架的基础,因为它不包含UI对象。同时Foundation是以coreFoundation框架(使用纯c语言编写的)为基础创建的。
下面我们来了解一些基本的类和数据类型:NSString,NSArray NSNumber.....和Cocoa提供的一些结构体。
一:范围
1.NSRange结构体
typedef struct _NSRange{
unsigned int location;
unsigned int length;
}NSRange;
该结构体用来表示事物的范围,通常是“字符串里的字符范围”,“数组元素的范围”。其中location存放的是存放该范围的起始位置;length表示该范围的元素个数。例如:
“Objective-C is a cool language”
cool可以用location = 17 length = 4表示
当没有范围的时间:Location可以用NSNotFound这个值表示没有范围,比如变量没有初始化
2.NSRange结构体的初始化方法
1⃣️ NSRange range; range.location = 17; range.length = 4; |
NSRange range = {17,4}; |
NSRange range = NSMakeRange(17,4); |
建议使用第三种!!!
3.几何数据类型CGPiont和CGSize结构体
struct CGPoint{
float x;
float y;
};//用来表示平面坐标
struct CGSize
{
float width;
float heigth;
};//表示长度和宽度
同时Cocoa提供了一种表示矩形的结构体CGRect
struct CGRect
{
CGPoint origin;
CGSize size
};
同时Cocoa也为我们提供了创建这些数据类型的快捷函数:
CGPointMake() CGSizeMake() CGRectMake();
二:字符串
1.NSString的创建
+ (id) stringWithFormat: (NSString*) format,...;
1⃣️定义最后的省略号:告诉编译器这个方法可以接受多个参数
2⃣️加号:OC运行生成一个类的时候,会创建代表该类的类对象,类对象包括 指向超类,类名,类方法的指针,还包含一个float类型的数据,为新创建的实例对象(指定)大小
如果你在声明方法的时添加了加号,就是将该方法定义为类方法,这个方法属于类,不属于实例对象。通常用于创建新 的实例。我们称这种用来创建新对象的类方法为工厂方法(factory method)。
类方法还可以用来访问全局数据。而减号则是对指定的对象实例中起作用,自身创建的大部分都是减号进行前缀。
2.NSString的大小
length方法:- (NSUInteger) length;
NSUInteger le = [heigth length];
3.字符串的比较
1⃣️比较字符串是否相同
- (BOOL) isEqualToString: (NSString*)aString;
NSString *things1 = @"hello 3";
NSString *things2 = [NSString stringWithFormat:@"hello %d",3];
if([things1 isEqualToString: things2])
2⃣️比较字符串的大小
- (NSComparisonResult) compare: (NSString *)aString options:(NSComparisonOption)mask;
//进行逐个字符比较 返回一个NSComparisonResult的枚举结构
enum{
NSOrderAscending = -1,
NSOrderSame,
NSOrderDescending
};typefef NSInteger NSComparisonResult;
进行字符串的比较时有相关选项可以选择,例如
NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch:进行完全比较,区分大小写
NSNumericSearch:比较字符串的字符个数,不是字符串值
//例如 忽略大小,并且按照字符个数进行排序
if([things1 compare:things2 options: NSCaseInsensitiveSearch | NSNumericSearch){}
3⃣️字符串内是否包含别的字符串
- (BOOL) hasPreFix: (NSString *)aString;//判断是否以aString开头
- (BOOL) hasSufFix: (NSString *)aString;//判断是否以aString结尾
如果想知道字符串内的某处是包含其他字符串,使用rangeOfString
- (NSRange) rangeOfString: (NSString*)aString;
//将rangeOfString:发送给一个NSString对象时,传递的参数是要查找的字符串。他会返回一个NSRange结构体,告诉你与这个字符串相匹配的部分在哪里以及能够匹配上的字符个数。
NSRange range = [filename rangeOfString:@"chapter"];//返回结构中有location + length
4.可变和不可变的NSString
NSString 创建的字符串都是不可以改变字符串原值的,只可以用它来进行相关操作,是常量。
NSMutableString是NSString的子类,是可以改变原值的。
+ (id) stringWithCapacity: (NSUInteger) capacity;
//capacity容量大小只是一个建议
NSMutableString *string = [NSMutableString stringWithCapacity:42];
这里包括他的增加,删除等等。
NSMutableString *string = [NSMutableString stringWithCapacity:30];
[string appendString: @"Hello there "];
[string appendFormat: @"human %d !",67];
最后的结果是 Hello there human 67 !
//appendString将其复制到接受对象的末尾;appendFormat附加到接受字符串的末尾
//删除
- (void) deleteCharactersInRange: (NSRange) aRange;
5.字符串的相加
NSString* string; // 结果字符串
NSString* string1, string2; //已存在的字符串
1. string = [NSString initWithFormat:@"%@%@", string1, string2 ];
2. string = [string1 stringByAppendingString:string2];//推荐这种方法
3. string = [string stringByAppendingFormat:@"%@%@",string1, string2];
三:集合
1.NSArray
NSArry有两个限制:1.只能存储Objective-C的对象,而不能存储原c的一些类型,如int float 等等。2.同时也不能在NSArray储存nil(对象的零值或者nil值)
创建:
//arrayWithObjects
NSArrary *array =[NSArray arrayWithObjects:@[@"one",@"two",@"three",nil];
//字面量语法
NSArrary *array2 =@[@"one",@"two",@"three"];
两个数组储存的内容是一样的,但是字面量写法明显代码量少;同时呢不同手动添加nil值。
i < [array count]//数组的元素个数;array[1] 或者 [array objectAtIndex:i];
2.可变数组
+ (id) arrayWithCapacity: (NSUInteger) numItems;
NSMutableArray *array = [NSMutableArray arrayWithCapacity: 17];
//使用addObject:在数组末尾添加对象
- (void) addObject: (id) anObject;
[array addObject: arr];
//删除某一个位置的元素
- (void) removeObjectAtIndex: (NSUInteger) index;
//使用
[array removeObjectAtIndex:1];
注意:不可以通过字面量来定义 可变数组。
四:字典
字典(dictionary)是关键字及其定义的集合。
Cocoa中能够有一个能够实现这种功能的集合类NSDictionary。NSDictionary能在给定的关键字(通常是一个NSString字符串)下储存一个数值(可以是任何类型的OC对象)。然后可以通过相应的关键字来查看这些数据。同样NSDictionary是不可变的对象。但是NSMutableDictionary允许你随意的添加和删除字典元素
//创建字典的两种方法
1.类方法:
+ (id)dictionaryWithObjectsAndKeys: (id) firstObject, ...;
NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:
t1,@"", t2,@"", nil];
//该方法后面的参数 先是要储存的对象,然后才是关键字。下面介绍的语法量方法刚好相反
2.语法量方法
NSDictionary *tires = @{
@"":t1,
@"":t2};//不需要添加nil,并且 关键字 + 值
//使用
也是分两种,类方法 和 字面量
Tire* tire = [tires objectForKey:@""];
Tire* tire = tires[@""];
下面说一下可变字典的使用:
向NSMutalbeDictionary类发送dictionary消息,便可以创建新的NSMutalbeDictionary对象
NSMutalbeDictionary *tires = [NSMutalbeDictionary dictionary];
//元素的添加使用类方法:
// - (void)setObject:(id)anObject forKey:(id)aKey;
[tires setObject:t1 forKey:@""];
[tires setObject:t2 forKey:@""];
//删除元素使用的方法
// - (void)removeObjectForKey: (id)aKey;
使用
[tires removeObjectForKey:@" "];
//可变字典没有 字面量初始化语法