您的位置:首页 > 职场人生

黑马程序员-12.OC的Foundation框架

2014-09-16 13:58 393 查看
                        ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------

1.NSRange

1)NSRange(结构体)

1>NSRange的几种用法

NSRange r1 = {2, 4}; // 不用
NSRange r2 = {.location = 2, .length = 4};// 不用
NSRange r3 = NSMakeRange(2, 4); // 掌握

2>查找某个字符串在str中的范围

如果找不到,length=0,location=NSNotFound==-1
NSString *str = @"i love oc";

NSRange range = [str rangeOfString:@"java"];
NSLog(@"loc = %ld, length=%ld", range.location, range.length);

2)CGPoint
1>CGpoint :表示一个点的位置坐标信息
2>定义结构

  CGPoint p1 = NSMakePoint(10, 10);
  NSPoint p2 = CGPointMake(20, 20);
3)CGRect
1>表示一个局域
CGRect r1 =CGRectMake(0,0,
100,
50);

2>表示原点
 CGPointZero == CGPointMake(0, 0)
4)将结构体转为字符串

CGPoint p1 = NSMakePoint(10, 10);
NSString *str = NSStringFromPoint(p1);

 
CGSize s3 = NSMakeSize(200, 60);

NSString *str = NSStringFromSize(s3);

CGRect r1 = CGRectMake(0, 0, 100, 50);
NSString *str = NSStringFromRect(r1);

注意:使用CGPointZero等的前提是添加CoreGraphics框架

5)比较两个点是否相同

BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
//CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)

// x (50, 150) y (40 , 90)
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));

NSLog(@"%d", b2);


2.NSString

1)NSString :不可变字符串(初始化以后不能够改变字符串的长度)
2)字符串的创建

NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];


3)OC字符串和C字符串的相互转换

// C字符串 --> OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串 --> C字符串
const char *cs = [s4 UTF8String];

// NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];


4)writeToFile
字符串的导出

[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" at
4000
omically:YES encoding:NSUTF8StringEncoding error:nil];

NSString *str = @"4234234";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

3.NSMutableString

1)NSMutableString : 可变字符串

2)拼接内容到s1的后面 
   NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
   [s1 appendString:@" 11 12"];

4.NSArray :不可变数组

1).NSArray的创建

NSArray *array2 = [NSArray arrayWithObject:@"jack"];

// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];

//NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];

// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];


2).NSArray的元素个数

 NSLog(@"%ld", array.count);

3).NSArray中元素的访问
    NSLog(@"%@", [array3 objectAtIndex:1]);
    array3[1];
注意:
OC数组不能存放nil值
OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
 这个array永远是空数组
 NSArray *array = [NSArray array];
4)数组的遍历的三种方法

Person *p = [[Person alloc] init];

NSArray *array = @[p, @"rose", @"jack"];
********************第一种方法******************
for (int i = 0; i


5.NSMutableArray : 可变数组

1)可变数组的基本用法
1>初始化
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

2>添加元素

  [array addObject:[[Person alloc] init]];
   [array addObject:@"jack"];
3>删除元素

[array removeAllObjects];
4> 删除指定的对象

[array removeObject:@"jack"];
 [array removeObjectAtIndex:0];
5>@[] 只创建不可变数组NSArray

错误写法
    NSMutableArray *array = @[@"jack", @"rose"];
    [array addObject:@"jim"];

6.计算代码行数

#import

// 计算文件的代码行数
/*
path : 文件的全路径(可能是文件夹、也可能是文件)
返回值 int :代码行数
*/
NSUInteger codeLineCount(NSString *path)
{
// 1.获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];

// 2.标记是否为文件夹
BOOL dir = NO; // 标记是否为文件夹
// 标记这个路径是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];

// 3.如果不存在,直接返回0
if(!exist)
{
NSLog(@"文件路径不存在!!!!!!");
return 0;
}

// 代码能来到着,说明路径存在

if (dir)
{ // 文件夹
// 获得当前文件夹path下面的所有内容(文件夹、文件)
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];

// 定义一个变量保存path中所有文件的总行数
int count = 0;

// 遍历数组中的所有子文件(夹)名
for (NSString *filename in array)
{
// 获得子文件(夹)的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename];

// 累加每个子路径的总行数
count += codeLineCount(fullPath);
}

return count;
}
else
{ // 文件
// 判断文件的拓展名(忽略大小写)
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
// 文件拓展名不是h,而且也不是m,而且也不是c
return 0;
}

// 加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

// 将文件内容切割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];

// 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];

// 打印文件路径和行数
NSLog(@"%@ - %ld", str, array.count);

return array.count;
}
}

int main()
{

NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享");

NSLog(@"%ld", count);
return 0;
}

void test()
{
NSString *str = @"jack\nrose\njim\njake";

[str writeToFile:@"/Users/apple/Desktop/abc.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSArray *array = [str componentsSeparatedByString:@"\n"];

for (NSString *line in array)
{
NSLog(@"%@", line);
}

//int count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0811/代码/04-block/04-block/main.m");

//NSLog(@"count=%d", count);
}


7.NSSet:不可变的集合

1)set的基本使用
1>定义和初始化

NSSet *s = [NSSet set];
    
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
2>随机拿出来一个元素

NSString *str =  [s2 anyObject];
NSLog(@"%@", str);
3>NSMutableSet:可变的集合

 NSMutableSet *s = [NSMutableSet set];
    添加元素
    [s addObject:@"hack"];
    删除元素
    [s removeObject:<#(id)#>];
4>NSSet和NSArray的对比
 1> 共同点
 * 都是集合,都能存放多个OC对象
 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
 * 本身都不可变,都有一个可变的子类
 2> 不同点
 * NSArray有顺序,NSSet没有顺序

8.NSDictionary

1)字典(里面存放的东西都是键值对
key ----> value
索引 ----> 文字内容
2)初始化
1>第一种初始化方法

 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
2>第二种初始化的方法

   NSArray *keys = @[@"name", @"address"];
   NSArray *objects = @[@"jack", @"北京"];
  NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    
3>第三中初始化的方法
   NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil];*/
4>第四种初始化的方法

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
     id obj = [dict objectForKey:@"name"];
     id obj = dict[@"name"];
    NSLog(@"%@", obj);

注意:NSLog(@"%ld", dict.count);

返回的是键值对的个数
3)字典的使用
添加键值对

    [dict setObject:@"jack" forKey:@"name"];
移除键值对
     [dict removeObjectForKey:<#(id)#>];
     NSString *str = dict[@"name"];
4)字典的遍历

{

NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};

//    NSArray *keys = [dict allKeys];
//
//    for (int i = 0; i

注意:

  字典不允许有相同的key,但允许有相同的value(Object)
  字典无序的
5)多个类型的键值对进行初始化和取值

NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];

//
// NSDictionary *jim = persons[2];

//
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];

//NSLog(@"%@", array);

// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);

// NSLog(@"%@", jim);


OC中集合的总结

1>.NSArray\NSMutableArray
 * 有序
 * 快速创建(不可变):@[obj1, obj2, obj3]
 * 快速访问元素:数组名[i]
 
 2>NSSet\NSMutableSet
 * 无序
 
 3>NSDictionary\NSMutableDictionary
 * 无序
 * 快速创建(不可变):@{key1 : value1,  key2 : value2}
 * 快速访问元素:字典名[key]

9.NSNumber

由于集合里面只可以存放OC对象,所以有的时间需要把基本类型转换成OC对象 这个时间就是用NSNumber

1)将各种基本数据类型包装成NSNumber对象
1>整形包装成NSNumber

    @10.5;
2>布尔包装成NSNumber

    @YES;
3>注意区分 @'A';和 @"A";
    @'A'; // NSNumber对象
    
    @"A"; // NSString对象
    
4> 将age变量包装成NSNumber对象
    int age = 100;
    @(age);
    //[NSNumber numberWithInt:age];
    

5>把整形包装成NSNumber对象

   int a = 20;
    // @"20"
NSString *str = [NSString stringWithFormat:@"%d", a];
NSNumber对象装换成整形

 NSLog(@"%d", [str intValue]

10.NSDate

 1)创建一个时间对象
    NSDate *date = [NSDate date];

2打印出的时候是0时区的时间(北京-东8区)
    NSLog(@"%@", date);

3)日期格式化类

NSDate *date = [NSDate date];

// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSString *str = [formatter stringFromDate:date];

NSLog(@"%@", str);


4 将字符串按一定的格式输出

// 09/10/2011
NSString *time = @"2011/09/10 18:56";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";

NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);


11.NSValue

1)是NSNumber的父类 ,NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

2)结构体--->OC对象
CGPoint p = CGPointMake(10, 10);

3)将结构体转为Value对象

   NSValue *value = [NSValue valueWithPoint:p];
 4)将value转为对应的结构体
    [value pointValue];
    NSArray *array = @[value ];
    

           ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: