FOUNDATION

来源:互联网 发布:h3c stp 阻塞端口 编辑:程序博客网 时间:2024/05/18 04:00
1 认识FOUNDATION框架




框架是由许多类、方法、函数以及文档按照一定的规则组织起来的集合,以便于
程序员更方便、迅速的开发程序。


cocoa程序编写主要用到2个框架Foundation和ApplicationKit(UIKit)。其
中Foundation框架主要定义了一些基础类,供程序员来使用,而Application kit
主要是一些用户界面设计的类,用于Mac开发使用此库。Foundation框架中的所
有类都继承自NSObject这个对象。
作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器
及其枚举,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常
数的“NS”前缀来自于Cocoa的来源,NextSTEP。它可以在Mac OS X和iOS中
使用。






2、数字对象的常用处理方法
在之前的学习中,我们已经学习了基本数据类型。但这些都是基本数据类型,
它们不是对象,因此,不能向它们发送消息。然而有时也需要将他们当做对象来处
理。比如,我们需要把基本类型放入集合中(在cocoa中集合只能存放对象,无法
存放基本数据类型),那么这时我们需要将基本类型转换为数字对象。OC中提供
了数字对象“NSNumber”可以将基本数据类型“包装”成对象,这样我们就可
以将基本数据类型来处理了。




// 实例方法创建数字对象


float pi = 3.14;


NSNumber *piNumber = [[NSNumber alloc] initWithFloat:pi];


char character = 'a';


NSNumber *cNumber = [[NSNumber alloc] initWithChar:character];




// 还原成基本数据类型


int month = [intNumber intValue];


BOOL isOpen = [boolNumber boolValue];


float length = [piNumber floatValue];


char firstName = [cNumber charValue];




@autoreleasepool{
    /*----------------------NSNumber ------------------------*/
    //创建一个NSNumber
    NSNumber *monthNumber  = [NSNumber numberWithInt:10];
    NSNumber *lengthNumber  = [[NSNumber alloc] initWithFloat:10.8];
    NSLog(@"monthNumber :%@",  monthNumber);
    NSLog(@"lengthNumber :%@",  lengthNumber);


    //还原成基本数据类型
    int  month = [monthNumber intValue];
    float  length =[lengthNumber floatValue];
    NSLog(@"month :%d",  month);
    NSLog(@"length :%lf",  length);


}x




run






3、字符串的基本概念和常用处理方法
在Foundation框架中,提供了NSString类,用于处理字符串对象。在c语言中
字符串在一对引号中表示。OC是C语言的一种延展,换句话说,OC语言是建立在
C语言的基础之上的(C的基础之上添加了面向对象的内容,smalltalk语言)。因
此,为了区别两者的字符串,OC语言的字符串必须以@开头,引号当中则是字符
串的内容,如@“abc”。此外,NSString对象,一旦被创建,就不可以再修
改。如若需要一个可以更改的字符串对象,需要创建NSMutableString实例。










加入


/*--------------------------NSString ----------------------------*/


//创建一个字符串常量
NSString *string1 = @"这是一个字符串常量";
NSLog(@"string1 :%@",  string1);


//创建一个空的字符串
NSString *string2 = [[NSString alloc] init];
NSString *string3 = [NSString string];
NSLog(@"string2 :%@",  string2);
NSLog(@"string3 :%@",  string3);


//快速创建一个字符串  常量区
NSString *string4 = [[NSString alloc] initWithString:@"快速创建字符串"];//字符串存储在常量区
NSString *string5 = [NSString stringWithString:@"快速创建一个字符串"];
NSLog(@"string4 :%@",  string4);
NSLog(@"string5 :%@",  string5);




//快速创建一个格式化字符串
int number = 2;
NSString *string6 = [[NSString alloc] initWithFormat:@"%d", number];


float number = 2.4;
NSString *string7 = [NSString stringWithFormat:@"浮点数%f", number];


NSLog(@"string6 :%@",  string6);
NSLog(@"string7 :%@",  string7);




//比较字符串 测试字符串内容是否相同 堆区


NSString *string8 = [[NSString alloc] initWithFormat:@"test"]; //字符串存储在堆区
NSString *string9 = [[NSString alloc] initWithFormat:@"test"];
if ([string8 isEqualToString:string9]) {
NSLog(@"测试连个字符串是否相等");
}




//测试字符串是否为同一个对象
NSString *string10 = [[NSString alloc] initWithFormat:@"test"];
NSString *string11 = [[NSString alloc] initWithFormat:@"test"];


if (string10 == string11) {
  NSLog(@"测试2个字符串是否为指向同一个对象");
}




//比较字符串的大小
NSString *string12 = [[NSString alloc] initWithFormat:@"a"];
NSString *string13 = [[NSString alloc] initWithFormat:@"b"];


NSLog(@"[string12 caseInsensitiveCompare:string13] : %ld", [string12 caseInsensitiveCompare:string13]);


//求字符串的长度
NSString *string14 = [[NSString alloc] initWithFormat:@"string length"];
NSLog(@"String14 length %li",[string14 length]);




//字符串的转换
//改变字符串大小写


NSString *hello = @"hello WORLD";
NSLog(@"%@", [hello uppercaseString]);
NSLog(@"%@", [hello lowercaseString]);
NSLog(@"%@", [hello capitalizedString]);




//将字符串转换成基本数据类型


NSString *string = @"2.467";
NSLog(@"%d", [string boolValue]); // 转换成BOOL类型
NSLog(@"%f", [string floatValue]);// 转换成浮点型
NSLog(@"%f", [string doubleValue]); // 转换成双精度型
NSLog(@"%d", [string intValue]);    // 转换成整型




//截取字符串对象
//将字符串转换为数组


NSString *string = @"One Two Three Four";
NSArray *array = [string componentsSeparatedByString:@" "];




//字符串的截取与拼接


//截取字符串
NSString *string = [NSString stringWithFormat:@"abcdef"];
NSString *string1 = [string substringToIndex:2];// 从字符串的开头直截取到指定的位置,但不包括该位置的字符
NSString *string2 = [string substringFromIndex:2];// 以指定位置开始(包括指定位置的字符),并包括之后的全部字符






//根据范围截取字符串


NSRange rang;
rang.location = 2;
rang.length = 2;
NSString *string3 = [string substringWithRange:rang];


//拼接字符串


NSString *str1 = @"1", *str2 = @"2";


NSString *string = [[NSString alloc] initWithFormat:@"这是拼接:%@ and%@", str1, str2];


NSString *string1 = [str1 stringByAppendingFormat:@"%@", str2];


NSString *string2 = [str1 stringByAppendingString:str2];




//查询字符串


NSString *link = @"asdastarget=_blankddasd";
NSRange range = [link rangeOfString:@"target=_blank"];
if(range.location != NSNotFound)//NSNotFound整数最大值
{
  NSLog(@"string 找到了");
}




-------------------------------------------------------------------------------------------------
可变字符串——NSMutableString,它继承自NSString


插入字符串


NSMutableString *str = [NSMutableString stringWithString:@"字符串"];
[str insertString:@"可变" atIndex:0];


删除字符串


NSMutableString *str = [NSMutableString stringWithString:@"字符符串"];
[str deleteCharactersInRange:NSMakeRange(1, 2)];




替换字符串


NSMutableString *str = [NSMutableString stringWithString:@"字符串"];
[str replaceCharactersInRange:NSMakeRange(0, 2) withString:@"羊肉串"];




-------------------------------------------------------------------------------------------------




集合——数组的概念和常用方法




数组的基本概念


Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通
过索引下标获取到数组中的各个元素。与字符串相同,数组也有可变和不可变数组之
分。此外,数组中不可以存放基本数据类型,只能存放类的实例(对象)。如若需要将
基本数据类型、结构体放入数组中,需要通过NSNumber、NSValue进行数据的“封装”。








不可变数组——NSArray


数组的初始化


NSArray *firstArray = [NSArray arrayWithObject:@"one"];
// 多个元素初始化时,注意以nil作为数组的结束
NSArray *secondArray = [NSArray arrayWithObjects:@"one",@"two", nil];
NSArray *thirdArray = [NSArray arrayWithArray:secondArray];
NSArray *FourthArray = [NSArray arrayWithContentsOfFile:path];




常用方法


NSArray *array = [NSArray arrayWithObjects:@"a",@"b",@"c", nil];


// 获取数组中的元素个数
NSInteger count = [array count]; 




// 根据下标访问对象
NSString *firstObj = [array objectAtIndex:0];
                     


// 在原来的数组上追加对象,返回一个新的数组对象
NSArray *addArray = [array arrayByAddingObject:@"d"];


//用指定的字符串将数组中的元素连接起来
NSString *arrayStr = [array componentsJoinedByString:@","];




// 数组中是否包含某对象
BOOL isContain = [array containsObject:@"b"];


// 查询指定对象在数组中的元素, 如果没此元素,返回NSNotFound
NSInteger index = [array indexOfObject:@"c"]; 




// 获取数组中最后一个元素
NSString *lastString = [array lastObject];




----------------------------------------------------------------------------------------


可变数组——NSMutableArray,它继承自NSArray




常用方法


// 初始化,设定元素个数为5,但可以更改的
NSMutableArray *mutableArray = 
            [NSMutableArray arrayWithCapacity:5];    


// 向数组中添加一个元素
[mutableArray addObject:@"aaa"];




// 向数组中指定下标插入元素
[mutableArray insertObject:@"ccc" atIndex:0];




// 移除最后一个元素
[mutableArray removeLastObject];




// 移除指定元素
[mutableArray removeObject:@"aaa"];




// 移除指定下标的元素
[mutableArray removeObjectAtIndex:0];




// 向数组中添加数组
[mutableArray addObjectsFromArray:array];


  
// 替换指定的下标元素
[mutableArray replaceObjectAtIndex:0 withObject:@"replace"];






// 移除所有对象
[mutableArray removeAllObjects];  










遍历数组










遍历数组常规方法


NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"z", nil];


int length = [array count];


for (int i = 0; i < length; i++) {
NSString *element = [array objectAtIndex:i];
NSLog(@"%@", element);
} // 遍历的性能较低


               
快速枚举


for (NSString *string in array) { 
NSLog(@"found %@", string);
} // 遍历的性能高




for (id string in array) {
NSLog(@"found %@", string);
} // 当不确定数组的元素的类型时,可以选择用id




   


-------------------------------------------------------------------------------------


集合——字典基本概念和常用方法


字典的基本概念 


Foundation中的字典(NSDictionary,NSMutableDictionary)是由键—值对组成
的数据集合。正如,我们在字典里查找单词的定义一样。通过key(键),查找对应
value(值),key通常是字符串对象,也可以是其他任意类型对象。在一个字典对象
中,key的值必须是唯一的。此外,字典对象的键和值不可以为空(nil),如果需要在
一个字典对象中表示一个空值,可以使用NSNull对象。






不可变字典——NSDictionary


字典的初始化




NSNumber *numObj = [NSNumber numberWithInt:100];
NSNumber *numObj2 = [NSNumber numberWithInt:200];


// 以一个元素初始化
NSDictionary *dic = [NSDictionary dictionaryWithObject:numObjor forKey:@"key"];


// 初始化两个元素
NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:numObj,@"valueKey",numObj2,@"valueKey2",nil];




// 初始化新字典,新字典包含 otherDic
NSDictionary *dic = [NSDictionary dictionaryWithDictionary:otherDic];


// 以文件内容初始化字典  
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];




常用方法


//获取字典数量
NSInteger count = [dic count];






//通过key获取对应的value对象
NSObject *valueObj = [dic objectForKey:@"key"];




//将字典的key转成一个枚举对象,用于遍历
NSEnumerator *enumerator = [dic keyEnumerator];


//获取所有键的集合
NSArray *keys = [dic allKeys];


//获取所有值的集合
NSArray *values = [dic allValues];






-------------------------------------------------------------------------------


可变字典——NSMutableDictionary继承自NSDictionary


常用方法




// 初始化一个空的可变字典(注意以下代码前后无关联性)


NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1", @"key1", @"v2", @"key2", nil];


NSDictionary *dic3 = [NSDictionary dictionaryWithObject:@"v3" forKey:@"key3"];


// 向字典2对象中添加整个字典对象3
[dic2 addEntriesFromDictionary:dic3];   //entry实体  entries






// 向字典2对象中追加一个新的key3和value3
[dic2 setValue:@"value3" forKey:@"key3"];






// 初始化一个空的可变字典
NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];


 
    
// 将空字典1对象内容设置与字典2对象相同
[dic1 setDictionary:dic2];






[dic1 removeObjectForKey:@"key1"]; // 将字典中key1对应的值删除




NSArray *array = [NSArray arrayWithObjects:@"key1",@"key2",@"key3",nil];




[dic2 removeObjectsForKeys:array]; // 根据指定的数组(key)移除字典1的内容




[dic1 removeAllObjects]; // 移除字典所有对象






遍历字典


快速枚举


for (id key in dic) {  
NSLog(@"%@", key);
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}






一般的枚举


NSArray *keys = [dic allKeys];
int length = [keys count];


for (int i = 0; i < length; i++) {
id key = [keys objectAtIndex:i];
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
}








通过枚举类型枚举


NSEnumerator *enumerator = [dic keyEnumerator];//key


id key = [enumerator nextObject];
while (key) {
id obj = [dic objectForKey:key];
NSLog(@"%@", obj);
key = [enumerator nextObject];
}




----------------------------------------------------------------------------------------------


集合的基本概念 


在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet
实例中元素是无序,同一个对象只能保存一个,并且它也分为可变和不可变的集合
对象(可变集合对象,NSMutableSet)。


不可变集合——NSSet


NSSet的初始化  


// 类似与数组的构建,直接创建一个集合
NSSet *set1 = [[NSSet alloc] initWithObjects:@"one", @"two", nil];


// 通过数组的构建集合
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
NSSet *set2 = [[NSSet alloc] initWithArray:array];


// 通过已有集合构集合
NSSet *set3 = [[NSSet alloc] initWithSet:set2];








NSSet常用方法


// 集合3中对象的个数
int count = [set3 count];




// 以数组的形式返回集合3中所有的对象
NSArray *allObjects = [set3 allObjects];




// 返回集合3中的任意一个对象
id object = [set3 anyObject];




// 集合4中是否包含内容为2的字符串对象,如果包含返回YES,否则为NO
BOOL isContain = [set4 containsObject:@"2"];


// 集合4中与集合2中是否存在有相同元素的对象,如果有返回YES,否则为NO
BOOL isIntersect = [set4 intersectsSet:set2];






// 集合4与集合5中的元素是否完全匹配,如果匹配返回YES,否则为NO
BOOL isEqual = [set4 isEqualToSet:set5];




// 集合4是否是集合5的子集合,如果是返回YES,否则为NO
BOOL isSubset = [set4 isSubsetOfSet:set5];






// 创建一个新的集合2,集合2有两个对象(a和b)
NSSet *set1 = [NSSet setWithObjects:@"a", nil];
NSSet *set2 = [set1 setByAddingObject:@"b"];






// 通过已有集合7和集合8,创建一个新的集合9
NSSet *set7 = [NSSet setWithObjects:@"a", nil];
NSSet *set8 = [NSSet setWithObjects:@"z", nil];
NSSet *set9 = [set7 setByAddingObjectsFromSet:set8];




// 通过已有的集合10和数组对象,创建一个新的集合11


NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
NSSet *set10 = [NSSet setWithObjects:@"z", nil];
NSSet *set11 = [set10 setByAddingObjectsFromArray:array];






可变集合——NSMutableSet,它继承自NSSet


可变集合的常用方法


// 创建一个空的集合(注意以下代码前后无关联性)
NSMutableSet *set1 = [NSMutableSet set];




NSMutableSet *set2 = [NSMutableSet setWithObjects:@"1", @"2", nil];


NSMutableSet *set3 = [NSMutableSet setWithObjects:@"a", @"2", nil];




// 集合2与集合3中元素的交集,集合2最后元素只有1个,且为2
[set2 intersectSet:set3]


// 集合2“减去”集合3中的元素,集合2最后元素只有1个,且为1
[set2 minusSet:set3];


// 集合2与集合3中的元素的并集,集合2最后元素只有3个,且为1,2,a
[set2 unionSet:set3]; 




// 将空集合1设置为集合3中的内容
[set1 setSet:set3];




// 根据数组的内容删除集合中的对象
[set2 removeObjectsFromArray:array];


[set2 removeObject:@"1"];


[set2 removeAllObjects];







0 0