黑马程序员——OC基础05—Foundation框架

时间:2022-04-10 00:28:08

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

一、Foundation框架
1.Foundation就是类、方法、函数、文档等按照一定的逻辑组织起来的集合。,它是mac和iOS的基础。
2.Foundation中常用的类有:

NSString(字符串);
NSArray (数组);
NSNumber(数字);
NSDate(日期);
NSData(数据);
NSDictionary(字典);

和他们分别对应的子类 NSMutableStringNSMutableArrayNSMutableDictionary

父类和子类的区别:父类不可变,内容不可修改,而子类的空间是可变的,内容可以修改,而子类可以继承父类所有的方法。

1)NSString 字符串
A: 字符串比较大小 compare

int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str1=@"abc";
NSString*str2=@"aqwerrtaberrtyhjkijk";
NSComparisonResult result =[str1 compare:str2];
switch (result) {
case -1: //NSOrderedAscending
NSLog(@"str1<str2") ;
break;
case 1: //NSOrderedDescending
NSLog(@"str1>str2") ;
break;
case 0: //NSOrderedSame
NSLog(@"str1==str2") ;
break;

default:
break;
}

判断字符串是否真的相等,isEqualToString

B. NSString前后缀 prefix suffix

if [URL has prefix :@"http://"]{
NSLog(@"这是一个网址");
}

C. 字符串的查找
让字符串在元字符串中查找首次出现的位置。

        NSString *str1=@"abc";
NSString*str2=@"aqwerrtabcerrtyhjkijk";

NSRange range=[str2 rangeOfString:str1];
//结构体别名 结构体变量
// 《A rangeOfString B》 代表在A中找到B首次出现的位置

if (range.location!=NSNotFound) {
NSLog(@"%lu,%lu",range.location,range.length);
}else
NSLog(@"%@未能在%@中找到",str1,str2);

D. NSRange的使用


NSRange r1 = NSMakeRange(2, 4); //第一个参数为.location 第二个参数为.length

NSString *str = @"学习OC";

NSRange range = [str rangeOfString:@"学习"]; //查找某个字符串在str字符串中的位置和长度

NSLog(@"loc = %ld, len = %ld",range.location, range.length);

给变量初始化时,通常会采用下面方法:
NSRange range1=NSMakeRange(5,3);
NSRange range2={.location=2,.length=4};
//输出查看range的值
NSRange r4=NSMakeRange(8,3);

NSLog(@"%@",NSStringFromRange(r4));

E 字符串的截取

      NSString *str5=@"asdf我爱你塞北的雪adsd";
str5=[str5 substringFromIndex:5];
//从序号5的位置一直到结束,包含5的位置
str5=[str5 substringToIndex:5];
//从开始位置到5的位置结束,不含5的位置

NSRange r6={34};
NSString* Str6=[str5 substringWithRange:r6];
//从序号为3的位置,输出字符长度为4的字符串,即“f我爱你”

F.字符串的替换

 NSString *str=@"adsafd dadfa fdads daf";
str=[str stringByReplacingOccurrencesOfString:@"a" withString:@"*"];//用*代替 a
str=[str stringByReplacingOccurrencesOfString:@" " withString:@""];//吸收空格
NSLog(@"==%@",str);
//目的是将字符串中的汉字输出。
NSString *str5=@"asdf我爱你塞北的雪jasdkh23";


NSUInteger loc=[str5 rangeOfString:@"f"].location+1;
NSUInteger len=[str5 rangeOfString:@"j"].location-loc;
NSRange r6={loc,len};

NSString* newString=[str5 substringWithRange:r6];


//取出指定位置的字符
unichar c = [str3 characterAtIndex:2];
NSLog(@"%c",c);

G.OC中字符串与C中的字符串相互转换

//c语言字符串转化为OC字符串 
NSString *s3 = [NSString stringWithUTF8tring:"name"];

//OC字符串转化为C语言字符串
const charchar *cs = [s3 UTF8String];

H.字符串的拼接

//请输入十次itcast并以空格格开;
NSMutableString *str6 = [ NSMutableString string];
for (int i=0; i<10; i++) {
[str6 appendString:@” itcast”];


2)NSMutableString
NSString的子类,NSMutableString定义的变量在堆区,可读可写。

NSString *str=@“Jack”;
str=@“Rose”;
此时的 str的指向发生了变化,空间地址不一样
A创建一个空字符串

NSMutableSting *str=[NSMutableString string];
B.初始化
NSMutableString *str1=[NSMutableString stringWithFormat:@“Jack”];

3)NSArray 和NSMutableArray

A 与int *p[]的区别 ,它只能存放一种数据类型,不能方便动态的添加和删除元素,
而NSArray可以存放任意OC对象,有顺序,不能存放C对象。一旦初始化后也是不能改变的,

B 空数组的创建

NSArray *arr =[NSArray array]
NSArray *arr4= [[NSArray allocc]initWithObject:@"Tom",nil];//调用对象方法
NSArray *arr2= [NSArray arrayWithObjects:@"Lose",@"Jack", nil];//一个元素 的创建
NSArray *arr4=[NSArray arrayWithArray *arr2];//用一个已经存在的数组创建
NSArray *arr3=[NSArray


arrayWithObject:@"Peter",nill];//多个元素的创建

NSArray*arr1=@[@"1",@"2",@"3",@"4"];//快速创建变量并且进行初始化
//注意:数组元素不能为nil,否则遇见nil则停止输出,如果真的想用,用[NSNull,nil]


C.

NSLog(@"%@",arr.count)//获得数组的个数
NSString *str1=[arr objectAtIndex:2];//将序号为2的元素赋值给字符串
NSUInteger loc = [arr indexOfObject:@"Peter"]; 取得字符串在数组中的地址
NSString *str=arr[3]; //重新指向数组

BOOL isYES=[arr containsObject:"Peter"];//是否含字符串
NSLog(@"====%@,%@,,,,,%ld",arr,str1,loc)

D. 快速访问数组元素

NSString str= arr[i];
E. 遍历数组元素

        NSArray *arr=@[@"ERIC",@"Peter",@"hello",@5];

for (int i=0; i<arr.count; i++) {
NSLog(@"%@",arr[i]);
} //普通下表访问

for (NSString *str in arr) {
NSLog(@"%@",str);//for 循环增强型



[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop){
if (idx==4) {
*stop=YES;//作用相当于break


}else NSLog(@"idx=%ld,obj=%@",idx,obj);


}];//快速枚举法

F.NSArray 写入文件 及读取文件



BOOL isYES=[arr3 writeToFile:@"/Users/mac/Desktop/Jian.plist" atomically:YES];
if (isYES){
NSLog(@“写入正确”);


}
NSArray *readArr=[NSArray arrayWithContentsOfFile:@"/Users/mac/Desktop/Jian.xml"];
NSLog(@"%@",readArr);

G. 分割字符串



NSString *str0=@"400-800-30298#400-300-12345";

NSArray *arr11=[str0 componentsSeparatedByString:@"#"];

NSArray *arr0= [str12 componentsSeparatedByString:@"-"];

NSLog(@"%@---%@---%@",arr11[1],[arr11 first Object],[arr11 last Object];

NSArray arr=@[@"jack",@"rose",@"lily"];
NSString*str= [arr componentsJoinedByString:@"-"];

//把数组元素用-连接起来

H.

 NSMutableArray

//1.创建数组并初始化
NSMutableArray *arr= [NSMutableArray arrayWithObjects:@"hello",@2,@5,@"world", nil];
//2.增加元素
//1)按照数组内容
[arr addObject:@"Peter"];
NSLog(@"%@",arr);
//2)按照下标
[arr insertObject:@"Eric" atIndex:3];

NSLog(@"%@",arr);

//3.删除元素
//1)按照数组内容
[arr removeObject:@"hello"];
NSLog(@"------>%@",arr);
//2)按照下标
[arr removeObjectAtIndex:4];
NSLog(@"_____%@",arr);
//3)全部删除
[arr removeAllObjects];
NSLog(@"%@",arr);

//4.修改元素
[arr replaceObjectAtIndex:3 withObject:@"Peter"];
NSLog(@"%@",arr);

//5.查找元素

BOOL isResearch= [arr containsObject:@"Peter"];
NSLog(@"%d",isResearch);




//6.调换元素

[arr exchangeObjectAtIndex:0 withObjectAtIndex:3];

NSLog(@"%@",arr);
}

4)NSDictionary

```


//NSDictionary的使用
//1.创建空字典
NSDictionary *dic0= [NSDictionary dictionary];
NSLog(@"%@",dic0);
//2.创建一族键值的字典
NSDictionary*dic1= [ NSDictionary dictionaryWithObject:@"黄苹果"forKey:@"key"];

//3.创建多组键值的字典
NSLog(@"%lu",dic1.count);//返回空建的个数

NSDictionary *dic2= [NSDictionary dictionaryWithObjectsAndKeys:@"shijiazhuang",@"sjz",@"baoding",@"bd",nil];

NSLog(@"%@",dic2);

//4/快速创建
NSDictionary *dict3=@{@"ZX":@"zhangshan",@"xpd":@"Eric",@"jy":@"jiayou",};

NSLog(@"%@",dict3);


//5.通过key值确认value值

NSArray *arr14=[dict3 allKeys];
NSLog(@"!!!!!!%@",arr14);

NSString *str13=[dict3 objectForKey:@"ZX"];
NSLog(@"+++++%@",str13);
// NSLog(@"%@",dict3[@"ZX"]);

//6.遍历
for (NSString *key in dict3) {
NSLog(@"-------%@==%@",key,[dict3 objectForKey:key]);


}

//block方法

[dict3 enumerateKeysAndObjectsUsingBlock:^(id key,id value, BOOL *stop){


NSLog(@"%@---------%@",key,value);
}];

//7、获取元素

NSLog(@"*****%@",dict3[@"ZX"]);


//8.把字典保存到文件中去,并且读取出
BOOL(isWrite)= [dict3 writeToFile:@"/USers/mac/Desktop/fight.plist" atomically:YES];
if (isWrite) {
NSLog(@"写入成功");
}

NSDictionary* dict4=[NSDictionary dictionaryWithContentsOfFile:@"/USers/mac/Desktop/fight.plist"];
NSLog(@"////////%@",dict4);

应用:
9.把河北省(石家庄市、保定市)和山东省(青岛市、济南市)

NSArray *hebeiarr=[NSArray arrayWithObjects:@"shijiazhuang",@"baoding", nil];
NSArray *shandarr=[NSArray arrayWithObjects:@"qingdao",@"jinan", nil];
NSDictionary *city= [NSDictionary dictionaryWithObjectsAndKeys:hebeiarr,@"Hebei",shandarr,@"Shandong", nil];


//写入文件
BOOL iswrite=[city writeToFile:@"/Users/mac/Desktop/city.plist" atomically:YES];
if (iswrite) {
NSLog(@"写入成功");

}

//读取文件
NSDictionary *readCity=[NSDictionary dictionaryWithContentsOfFile:@"/Users/mac/Desktop/city.plist"];
NSLog(@"+++++========%@",readCity);


return 0;

NSMutableDictionary

    //1.创建空字典

NSMutableDictionary *dict1= [NSMutableDictionary dictionary];
NSMutableDictionary *dict1= [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value",@"key",@"value1",@"key1", nil];


//2.增加键值对

[dict1 setValue:@"value" forKey:@"key"];

//3.删除键值对

[dict1 removeObjectForKey:@"key"];
[dict1 removeAllObjects];
//4.修改

[dict1 setObject:@"value1" forKey:@"key"];
dict1[@"key"]=@"XXXX" ;//将key值修改为XXXX
//5.查找

NSArray * arr=[dict1 allKeys];

if (arr containsObject:@"key1") {
NSLog(@"value=%@",dict1[@"key1"]);
}

3.Foundation的结构体类型

1)Foundation框架常用结构体NSRange\CGRange、NSPoint\CGPoint、NSSize\CGSize、 NSRect\CGRect 的使用

//CGPoint的使用  
1>CGPoint\NSPoint一般用于表示点元素的坐标位置。CGPoint比较常用,因为CGPoint可以跨平台。
2>可以使用NSMakePoint和CGPointMake方法创建CGPoint和NSPoint对象。开发中CGPointMake比较常用。例:

NSPoint p = NSMakePoint(10,45);

//从一个结构体变量获取坐标
float x = p.x;
float y = p.y;

3>比较两个点是否相同(xy)
Bool b = CGPointEqualToPoint(CGPointMake(10,10),CGPointMake(10,10));

原点可以使用CGPointZero,相当于CGPointMake(0,0);同CGSizeZero,CGRectZero,如:
CGRect r4 = {CGPointZero,CGSizeMake(100,90)};


//NSSzie的使用

1>CGSize和NSSize表示一个UI元素的尺寸。
2>可以使用CGSizeMake和NSMakeSize方法创建CGSize和NSSize对象。如:
NSSize s = NSMakeSize(10,45)
从一个结构体变量获取width,heigth
float width = s.width;
float height = s.heigth;


//CGRect 的使用

一个结构体由点、大小组成 ,存储一个矩形的起止点、长度和宽度;
1>CGRect和NSRect表示一个UI元素的位置和尺寸。
2>可以通过CGRectMake和NSMakeRect方法创建CGRect和NSRect对象。如:
CGRect r1 = CGRectMake(0,0,150,100);
NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height)

3>比较两个Rect是否相同
CGRectEqualToRect(CGRect rect1,CGRect rect2);

4>判断CGRect中是否包含CGPoint
CGRectContainsPoint(CGRect rect,CGPoint point);

NSRect r1 = NSMakeRect(0, 0, 100, 120);

NSRect r2 = {0,0,100,120};

//对结构体最底层的成员赋值
NSRect r3;
r3.origin.x = 0.0;
r3.origin.y = 0.0;
r3.size.width = 100.0;
r3.size.height = 120.0;


//打印结构体的方法
NSString *s = NSStringFromPoint(point1);
NSLog(@"%@",s);

NSString *s1 = NSStringFromRect(rect1);
NSLog(@"%@",s1);