ios笔记--Foundation框架学习笔记

1.Foundation框架提供的常用结构体有:

(1)NSRange:这个结构体用来表示事物的一个范围,一般用于查找指定位置范围内的字符串及字符 

Location表示该范围的起始位置。

Length表示该范围内所含的元素个数。

定义:typedef struct _NSRange {

NSUInteger location;

NSUInteger length;

}NSRange;

创建一个NSRange变量的三种方式:

第一种:NSRange range;

Range.location =7;

Range.length =3;

第二种:应用C语言的聚合结构赋值机制

NSRange range =(7,3);//表示从第7个位置开始,查找3个元素

或者NSRange range ={.location =7, .length =3};

第三种:Foundation 框架提供的一个快捷函数NSMakeRange可以用它来查找指定范围内的字符串。 

NSRange range = NSMakeRange(7,3);

打印时可以把这种结构体转换成字符串输出:

NSPoint p =(1,3);

NSString *str = NSStringFromPoint(p);

输出结果为:{1,10}

扩展:CG开头代表是CoreGraphics框架。CF代表是CoreFoundation框架。

NS前缀由来:因为乔布斯之前创办的公司叫NextStep

(2)NSSize:这个结构体用来存储宽度和高度。=CGSize

定义:struct CGSize{

CGFloat width;

CGFloat height;

};

Typedef struct CGSize CGSize;

可以利用NSMakeSize()CGSizeMake()创建CGSize;

(3)NSRect :这个结构体可以用来存储宽度和高度。 =CGRect

定义:struct CGRect{

CGPoint origin; //矩形左上角坐标

CGSize size; //矩形的宽度和高度

}

Typedef struct CGRect CGRect;

可以利用NSMakeRect()CGRectMake()创建CGRect

2、结构体常用的类有:这些类的内存不需要手动管理,系统会自动释放。

(1)NSString:不可变的字符串。

1)、创建常量字符串:  NSString *string = @”This is a String!”;

2)、创建空字符串,给予赋值: NSString *string =[[NSString alloc] init];

String =@”This is a String!”;

3)、通过字符串创建字符串:char * c =”这是一串中文”;

[[NSString alloc] initWithString:@”This is a String!”];这种创建方式会自动释放内存,不需要再release了。

3NSString常用的几种方法:

(1).uppercaseString:把字符串转变成大写。

(2).lowercaseString:把字符串转变成小写。

(3) capitalizedString:首字母变大写,其他字母都变小写。

(4) isEqualToString:检测两个字符串的内容是否相同。

(5) Compare:比较两个字符串的内容。返回值有三种:NSOrderedAscending(左侧小于右侧)NSOrderedDescending(左侧大于右侧)NSOrderedSame(两侧相等)

(6) caseInsensitiveCompare:忽略大小写进行比较,返回值与compare一致。

(7) hasPrefix: 是否以某字符串开头,是返回1,否返回0.

(8) hasSuffix: 是否以某字符串结尾,是返回1,否返回0.

(9) rangeOfString:字符串的搜索,返回字符串出现的起始位置和字符串的长度。默认是从左往右进行搜索。

NSRange range = [str rangeOfString:@”456” options:NSBackwardsSearch]代表从尾部进行搜索字符串。

(10) subStringFromIndex:字符串的截取。从给出的索引位置开始截取。

(11) subStringToIndex: 字符串的截图。 从头开始截取到给出的索引位置止

(12) subStringWithRange:截取指定范围的字符串。

(13) componentsSeparatedByString:根据给出的字符串进行分割一个字符串。

(14) pathWithComponents:把数组中的所有字符串拼接成一个路径。

(15) pathComponents: 把一个路径切割成数组输出。

(16) isAbsolutePath: 判断一个路径是否是绝对路径。判断原理就是判断是否从根路径开始,即从”/”开始。

(17) lastPathComooponent: 返回最后一个目录名。

(18) stringByDeletingLastComoponent: 返回去掉最后目录的一个文件路径。

(19) stringByAppendingPathComponent: 在最后面拼接一个目录。

(20) pathExtension: 获得拓展名。

(21) stringByDeletingPathExtension: 删除尾部的拓展名。

(22) stringByAppendingPathExtension: 在尾部添加一个拓展名。

(23) Length:返回字符串的长度。

(24) characterAtIndex:返回index位置对应的字符。

(25) doubleValue floatValue、 intValue :强制转换字符串类型。

(26)  UTF8String: 返回C语言的字符串。

4NSMutableString:可变的字符串。

1)、创建可变的字符串常用方法:

- (id) initWithCapacity:(NSUInteger) capacity

+ (id) stringWithCapacity:(NSUInteger) capacity

Capacity 预分配最优值,只是告诉内存先按照capacity这个值先分配一块内存用来存储数据,目的是为了使操作速度变快。

2)、常用的一些方法:

(1) setString:初始化完毕后可以使用此方法设置字符串的内容。

(2) appendString/appendFormat: 这两个方法都是在尾部拼接一段字符串。

(3) replaceCharactersInRange:(NSRange) range withString:(NSString *) aString:range位置的字符串替换为aString

(4) insertString:(NSString  *)  aString  atIndex:(NSUInteger) loc:loc这个位置插入aString(aString的起始位置就是loc).

(5) deleteCharactersInRange:(NSRange) range:删掉range这个范围的字符串。

5NSArray数组:用来存储对象的有序列表,它是不可变的。不能存储C语言中的基本数据类型,如intfloat,enum,struct,也不能存储nil

(1)创建NSArray的常用方法:

+(id) array:这种是静态方法创建一个数组,是不用管内存的,系统会自动处理。

+(id)arrayWithObject:(id) anObject:只支持装入OC对象,不支持装入常用类:int,float

(2) 常用的一些方法:

Count:获取集合元素的个数。

ContainObject:是否包含某一个元素

LastObject:返回最后一个元素。

objectAtIndex:获得index位置对象的元素。

IndexOfObject:(id)anObjet inRange:(NSRange) range:range范围内查找元素的位置。

IsEqualToArray:比较两个集合内容是否相同。

FirstObjectCommonWithArray:返回两个集合中第一个相同的对象元素。

-(void)makeObjectsPersormSelector:SELaSelector:给数组元素发送消息。

-(void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id) argument

6、数组中的内存状况:

要点:当把一个对象塞进一个数组时,数组会对它进行一次retain操作,计数器会加1。但数组被销毁时,它会对里面所有的对象都进行一次release操作。

7、数组的遍历:

第一种:用for语句

NSArray *array = [NSArray arrayWithObject:@”1”,@”2”,@”3”,nil];

Int  a = array.count;

For(int i ; i<a;i++){

Id object  =[array  objetAtIndex:i]

NSLog(@”%i——%@”,i,obj);

}

第二种:快速遍历,类似js的语法

NSArray *array = [NSArray arrayWithObject:@”1”,@”2”,@”3”,nil];

Int i = 0;

For(id obj in array){

NSLog(@”%i——%@”,i,obj);

i++;

}

第三种数组遍历:

NSArray *array = [NSArray arrayWithObject:@”1”,@”2”,@”3”,nil];

[array enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){//三个参数:对象,索引,判断到第几个索引就让其停止的指针,默认是到数组结尾。

//如果索引为1,就停止遍历

Ifidx ==1{

//利用指针修改外面BOOL变量的值

*stop =YES;

}

}];

第四种数组遍历方式:迭代方法

NSArray *array = [NSArray arrayWithObject:@”1”,@”2”,@”3”,nil];

//获取数组的迭代器

NSEnumerator *enumerator =[array objectEnumerator];

//获取下一个需要遍历的元素

Id obj = nil;

While(obj =[enumerator nextObjet]){

NSLog(@”obj=%@”,obj);

}

第五种数组遍历方法:返回所有元素。

NSArray *array  =[enumerator allObjects];

NSLog(@”array:%@”,array);

缺陷:如果前面已有遍历过了,那么这个方法将从遍历过的那个索引开始再接着遍历。

8NSArray派生出新的集合

-NSArray *arrayByAddingObject:(id) anObject

添加一个新的元素,返回一个新的NSArray(方法调用者本身没有改变)

-(NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray

添加otherArray的所有元素,返回一个新的NSArray(方法调用者本身没有改变)

-(NSArray *) subarrayWithRange:(NSRange) range

截取range范围的数组元素

-NSString *componentsJoinedByString:(NSString *) separator

separator作拼接符将数组元素拼成一个字符串

-BOOLwriteToFile:(NSString *) path atomically:(BOOL) useAuxiliaryFile

将一个NSArray持久化到文件中去。

9、数组排序

第一种排序方法:

Void arraySort1(){

NSArray *array = [NSArray arrayWithObjects:@”2”,@”3”,@”1”,@”4”,nil];

//返回一个排好序的数组,原来的顺序不会改变。

NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];

NSLog(@”array2:%@”, array2);

}

第二种排序方法:

Void arraySort2(){

Student *stu1 = [Student studentWithFirstname:@”MingJie”];

}

10ArrayMutableArray:可变数组,即可以扩展数组元素的数组。

11、NSDictionaly:不可变字典,即通过关键字去找对应的对象。 

12NSMuDictionaly:可变字典,可以随便添加键值对来扩充字典的元素。 

13NSNumber:可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArrayNSDictionary等集合中。是NSValue的子类。

14、NSValue:可以包装任意值,也就可以用NSValue包装结构体后加入NSArrayNSDictionary等集合中。NSValue在使用过程中,接收的对象比NSNumber较为广泛。 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])

{

    NSPoint p = NSMakePoint(3, 4);

    NSValue *v = [NSValue valueWithPoint:p];  

    NSPoint p1 = [v pointValue];

    NSLog(@"p1.x = %f,p1.y = %f",p1.x,p1.y); 

    NSSize s = NSMakeSize(1, 2);

    NSValue *v1 = [NSValue valueWithSize:s];

    NSSize s1 = [v1 sizeValue];

    NSLog(@"v1.width = %f, v1.height = %f",s1.width,s1.height);

    NSRect r = NSMakeRect(1, 2, 3, 4);

    NSValue *v2 = [NSValue valueWithRect:r];

    NSRect r1 = [v2 rectValue];

    NSLog(@"r1.x = %f,r1.y = %f,r1.width = %f,r1.height = %f",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);

    return 0;

}

15、NSDate:是OC的日期处理类,它主要用于日期时间提取计算等常规的时间处理。 默认使用date方法生成的时间点为格林尼治标准时间。计算机内部的默认时间是从197011日开始的。  

16、一些基本概念

深拷贝:深拷贝就是新建一个对象和新开辟一块内存。

浅拷贝:浅拷贝就是新建一个对象,但是都指向同一块内存地址。

原子性:就是写入文件时,会先产生一个临时文件用来保存存入的数据,当全部存入了临时文件时,再临时文件的内容拷贝到目标文件中去。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值