牛骨文教育服务平台(让学习变的简单)
博文笔记

Foundation框架-学习笔记<一>

创建时间:2015-08-02 投稿人: 浏览次数:810
说明:自己的学习记录,记录的并不全面,只是把自己学到的记录下来,仅供大家参考。 0】框架使用注意点汇总
1)使用CG开头的函数需要添加框架:CoreGraphics框架 2)Foundation框架里面的东西一般都以NS开头。 3)OC中不允许直接修改对象的结构体属性的成员。但允许直接修改对象的结构体属性。
eg:
self.head.frame.origin.y = self.head.frame.origin.y - 10;  // 错误,不能直接修改y值。

CGRect tempFrame = self.head.frame;   // 间接方式修改属性值,这样就对了 tempFrame.origin.y -= 10; self. head.frame = tempFrame;

1】NSRange 范围类型
定义:
typedef struct _NSRange {
       NSUInteger location;
       NSUInteger length;
} NSRange;
赋值:
NSRange r1 = {2, 4};  //不用这种方式
NSRange r2 = {.location = 2, .length = 4};  //不用这种方式
NSRange r3 = NSMakeRange(2,4);   //建议采用这种方式赋值。
常用方法/函数:
1)NSMakeRange 给NSRange赋值
eg:NSRange r3 = NSMakeRange(2,4);   //建议采用这种方式赋值。

2】NSString 字符串类型(不可变字符串)
定义变量:
NSString *s = @"abc";
常用方法/函数:
1)rangeOfString方法:    查找某个字符串在str中的范围。
如果找不到,length=0,location = NSNotFound(其值为-1,用%d输出是-1,用%ld输出是9223371……一串很长的数字,这是因为符号位与非符号位造成的)。
eg: NSRange range = [str rangeOfString:@"java"];
2)NSStringFromPoint函数   将某个点转换为字符串
3)stringWithFormat方法  返回格式化后的字符串
格式:[NSString stringWithFormat:(NSString *), ...]  
eg:NSString *s = [NSString stringWithFormat:@"age is %d",43];
4) initWithFormat方法  返回初始化的字符串  
格式:[[NSString alloc] initWithFormat:(NSString *)]
eg:NSString *s1 = [[NSString alloc] initWithFormat:@"%d",44];
5)initWithUTF8String方法:C语言字符串转换为NSString字符串
格式:[NSString alloc] initWithUTF8String:(const char *)
eg:NSString *s1 = [[NSString alloc] initWithUTF8String:"abc"];
6)UTF8String方法 :NSString字符串转变为C语言的字符串。
eg:const char *ss2 = [s1 UTF8String];
7)initWithContentsOfFile方法   从本地文件中读取数据初始化NSString字符串
 格式: initWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *) 说明: (NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编码:NSUTF8StringEncoding 
eg: NSString *s3 = [[NSString alloc] initWithContentsOfFile:@"/Users/liugang/临时资料/001.txt" encoding:NSUTF8StringEncoding error:nil];
注意:该方法的路径字符串可以含有中文。
8)initWithContentsOfURL方法   从URl指定的文件中读取数据初始化NSString字符串。
格式: initWithContentsOfURL:(NSURL *) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *) 说明:(NSStringEncoding)指编码规则,为了能正常读取中文,需要使用编
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/临时资料/001.txt"];
[[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
9)writeToFile方法 :将NSString字符串写入文件,文件路径只能使用本地路径 
格式:[@"agb" writeToFile:(NSString *) atomically:(BOOL) encoding:(NSStringEncoding) error:<#(NSError *__autoreleasing *)#>]
说明:
@""中是英文的时候才能自动带出writeToFile函数。
atomically:YES,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。 要对写入的字符串进行换行,在字符串中加入" "。
eg:
[@"I love you" writeToFile:@"/Users/liugang/临时资料/003.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
10)writeToURL方法:将NSString字符串写入文件,文件路径使用URL路径 
格式:
[s3 writeToURL:(NSURL *) atomically:(BOOL) encoding:(NSStringEncoding) error:(NSError *__autoreleasing *)]
说明:
atomically:YES,中间出错时不生成文件;NO,中间出错会在文件中生成部分内容。
路径指示的文件不存在会自动创建该文件。
要对写入的字符串进行换行,在字符串中加入" "。
eg:
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
NSString *s3 = @"i love you";
[s3 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]
11)stringByAppendingString方法:对NSString字符串后附加字符串并返回新字符串的指针。
格式:
[s2 stringByAppendingString:(NSString *)];
说明:
从这里可以看出可变字符串与不可变字符串之间的区别。
eg:
        NSString *s2 =[NSString stringWithFormat:@"I am liugang"];
        NSString *s3 = [s2 stringByAppendingString:@" too"];
12)pathExtension属性:扩展的路径(如果有的话)的字符串作为解读为路径。(只读)
说明:
返回该路径中文件的扩展名,注意"."并不属于扩展名内。
格式:
@property(readonly, copy) NSString *pathExtension
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
13)lowercaseString属性:一个字符串的小写字母表示。
格式:
@property(readonly, copy) NSString *lowercaseString
eg:
//判断文件的扩展名,并转为小写
NSString *extension = [[path pathExtension] lowercaseString];
14)isEqualToString方法:返回一个布尔值表明一个给定字符串是否等于接收的文字,基于unicode的比较。
格式:
- (BOOL)isEqualToString:(NSString *)aString
说明:
相等返回YES,不相等返回NO
eg:
NSString *extension = [[path pathExtension] lowercaseString];
if ([extension isEqualToString:@"h"] || [extension isEqualToString:@"m"] || [extension isEqualToString:@"c"]) 
        {
            //NSLog(@"不是文件夹");
            NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
            NSArray *array = [content componentsSeparatedByString:@" "];
            //输出每一行的数据
            // [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            //    NSLog(@"第%ld行:%@",idx,obj);
            //  }];
            return array.count;
        }
15)intValue属性:将OC字符串类型转换为其对应的数值。
格式:
@property(readonly) int intValue
eg:
        NSString *str2 = [NSString stringWithFormat:@"100"];
        NSLog(@"%d",[str2 intValue]);  //输出100

2】NSMutableString   可变字符串类型
说明:
NSMutableString继承NSString,所以所有的NSString方法都能用在NSMutableString类上。
常用方法/函数:
1) appendString方法:对NSMutableString字符串进行扩充,在原字符串的尾部增加字符串。
格式:
[s1 appendString:(NSString *)]
eg:
 NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
 [s1 appendString:@"wenjing"];
2)deleteCharactersInRange方法:对NSMutableString字符串删除对应范围的字符
格式:
[s1 deleteCharactersInRange:(NSRange)]
eg:
 NSMutableString *s1 = [NSMutableString stringWithFormat:@"i love you !"];
 NSRange r1 = [s1 rangeOfString:@"you"];
 [s1 deleteCharactersInRange:r1];

3】NSURL  资源路径类型
说明:URL,资源路径 ; 
格式: 
“协议头://路径”
eg:file://  ;     ftp://  ;  http://weibo.com/a.png;
常用方法/函数:
1)initWithString  初始化赋值NSURL对象。
eg:NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/liugang/Desktop/001.txt"];
注意:
使用该方法的路径字符串中不要含有中文。
                         
4】NSPointCGPoint  点类型
说明:
两个是等价的,但CGPoint具有跨平台性。
表示一个点。
常用方法/函数:
1)NSMakePoint/CGPointMake函数:  给NSPointCGPoint赋值
 NSPoint p1 = NSMakePoint(10,20);
CGPoint p2 = CGPointMake(30,20); //最常用
或:
CGPoint p1 = NSMakePoint(10,20); NSPoint p2 = CGPointMake(30,20); //最常用
5】NSSizeCGSize 描述大小的类型 
说明:
表示一个矩形区域大小,一般用来描述一个UI的大小
两个是等价的,但CGSize具有跨平台性。
常用方法/函数:
1)NSMakeSize/CGSizeMake函数:  赋值
NSSzie s1 = NSMakeSize(10,20);
CGSzie s2 = CGSzieMake(40,50);
2)CGSizeEqualToRect函数:  比较
6】NSRectCGRect 表示矩形的类型
说明:
描述一个矩形大小以及位置,拥有x,y值以及宽和高。 用NSLog输出时,不能用%@直接输出,要用NSStringFromCGRect(CGRect rect)函数转化为字符串进行输出。
常用方法/函数:
1)NSMakeRect/CGRectMake函数: 赋值函数
NSRect = NSMakeRect(0,0,10,30);
CGRect = CGRectMake(0,0,20,30);
2)CGRectEqualToRect函数:  比较函数
3)CGRectContainsPoint函数:  判断某个点是否在某个矩形区域
7】NSArray数组类型(不可变数组)
说明:
1、利用C语言形式的数组建立的数组,只能放一种类型的数据。
2、OC不能放基本数据类型、非OC对象,只能存放OC对象。
3、OC数组是不能存放nil值。
 4、直接用%@输出NSArray数组时会把数组中所有项全部输出。
常用方法/函数:
1)array方法:创建一个空的OC数组。
eg:
 NSArray *array = [NSArray array];  //这个array永远是一个空数组。
2)arrayWithObjcet:创建并返回一个数组,其中包含一个给定的对象。
eg:
NSArray *array = [NSArray arrayWithObject:@"abc"];
3)arrayWithObjcets:创建并返回一个数组,其中含有多个给定的对象。
格式:
[NSArray arrayWithObjects:(id), ..., nil]
说明:
1)nil是数组的结束标示。
2)不允许写多个nil,只能在最后加一个nil。
eg:
 NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
4)count:返回数组元素的个数。
格式:
@property(readonly) NSUInteger count
eg:
NSArray *array = [NSArray arrayWithObjects:@"agb",@"djf",nil];
int x = [array count];
5)objectAtIndex:返回位于指定索引的对象。
格式:
- (id)objectAtIndex:(NSUInteger)index
说明:
数组中第一个元素的下标索引值为0;
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",[array objectAtIndex:0]); 
6)“[”“]”:编译器特性,快速访问数组NSArray元素。
说明:
编译器遇到[]类型的代码会自动转换为objectAtIndex形式。
eg:
NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
NSLog(@"%@",array[0]); 
7)快速创建多个元素的OC对象数组,这个也是编译器特性。
eg:
 NSArray *array = [NSArray arrayWithObjects:@"123",@"abc",@"432",nil];
 NSArray *array1 = @[@"123",@"abc",@"432"];  //和上面是等价的。
8)遍历OC对象数组。
eg:
        NSArray *array = @[@"123",@"abc",@"432"];
//方法一
        for (int i = 0; i < array.count; i++) {
            NSLog(@"%d-%@",i,array[i]);
        }
//方法二
        for (id i in array)
        {
  NSUInteger x = [array indexOfObject:i];
  NSLog(@"%ld-%@",x,i);
        }
//方法三
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
       //每遍历到一个元素,就会调用一次block
       //并且当前元素和索引位置当做参数传给block
       //给*stop赋值"YES"或"NO",来继续遍历或停止遍历。
       NSLog(@"%ld-%@",idx,obj);
 }];

9)indexOfObject:返回与参数传入的数组元素相等的元素的索引下标
格式:
- (NSUInteger)indexOfObject:(id)anObject
eg:
for (id i in array)        
{
    NSUInteger x = [array indexOfObject:i];
    NSLog(@"%ld-%@",x,i);
}
10)enumerateObjectsUsingBlock:利用块模块遍历数组
说明:
执行一个给定的块用于数组中的每个对象,从第一个对象,并继续通过数组最后一个对象。
如果块参数等于零这个方法将引发一个异常。值分配块内块执行后将被收回。使用保留显式地维护这些值。
格式:
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
eg:
          NSArray *array = @[@"123",@"abc",@"432"];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
{
       //每遍历到一个元素,就会调用一次block
       //并且当前元素和索引位置当做参数传给block
       //给*stop赋值"YES"或"NO",来停止遍历或继续遍历。
       NSLog(@"%ld-%@",idx,obj); 
       if(idx == 1)
      { *stop = YES;}   //停止遍历
 }];
11)componentsSeparatedByString:返回一个数组,其中包含来自接收者的子字符串,用一个给定的分隔符进行分割。
格式:
- (NSArray *)componentsSeparatedByString:(NSString *)separator
eg:
int codeLineCount(NSString *path)
{
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//以“ ”分割字符串
NSArray *array = [content componentsSeparatedByString:@" "]; 
//变量该array数组。
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第%d行:%@",idx,obj); 
}]; 
return array.count; 
}
12)高级应用。
eg:
1)数组中的元素对象为字典对象。
        NSArray * array3 = @[
                         @{@"1":@"aaa",@"2":@"bbb",@"3":@"ccc"},
                         @{@"1":@"bbb",@"2":@"ccc"},
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。