黑马程序员—(iOS开发)OC中Foundation详解---(十一)

  ------- android培训iOS培训Java培训.NET培训期待与您交流! ----------


PS:这节是重点哟!


说明:

1、结构体

2、集合

1、结构体

1> NSRange:(范围)

 location定位下标;length定位的长度

② 使用:(NSString * str = @”i love you”;love的范围)

NSRange r1 = {2,4};//不用

NSRange r2 ={.location = 2,.length = 4};//不用

NSRange r1 = NSMakeRange(2,4); //掌握

//查找某个字符串在str中的范围,若未找到,length=0location=NSNotFound=-1;

NSRange range = [str rangeOfString:@”love”];

1>     NSPoint/CGPoint(点)

     CGPoint p1 = NSMakePoint(5,3);

     NSPoint p1 = CGPointMake (5,3);//最常用,跨平台

     原点:CGPointZero == CGPointMake(0,0);

     注意:将结构体转为字符串输出内容:NSString *str=NSStringFromPoint(p1);

2>     NSSize/CGSizeUI元素的尺寸)

     NSSize n1 = CGSizeMake(100,50);=NSMakeSize10050);

     CGSize n2 = NSMakeSize10050);

     注意:将结构体转为字符串输出内容:NSString *str=NSStringFromSize(n1);

3>     NSRect/CGRect(点和尺寸)

     NSRect n1 = CGRectMake(5,3,100,50)//x,y,width,height

     CGRect n2 = NSMakeRect(5,3,100,50)

。注意:可CGRect n2 = {{5,3},{100,50}};

                或:CGRect n2 =p1,s2;

                原点:CGRect n2 =CGPointMake(0,0), CGSizeMake(100,50);

     注意:将结构体转为字符串输出内容:NSString *str=NSStringFromRect (n1);

4>     CGPointEqualToPoint(比较两个点的xy值是否一致):

     BOOL b = CGPointEqualToPoint(CGPointMake (5,3), CGPointMake (5,3));

     CGPointEqualToRect(CGrect rect1CGRect rect2);

     CGPointEqualToSize(CGSize size1CGSize size2);

     CGRectContainPointCGRectMake(5,3,100,50)CGPointMake(100,50));

5>      

 

2、NSString使用:

1>     NSString:不可变字符串;

NSMutableStringNSString的子类):可变字符串;

2>     字符串的创建:

     NSString *s1 = @”jack”;

     NSString *s2 = [[ NSString alloc] initWithString:@”jack”];

     NSString *s3 = [[NSString alloc] initWithFormat:@”jack”];

//(C字符串-OC字符串)

     NSString *s4 = [[ NSString alloc] initWithUTF8String:”jack”];

//OC字符串—C字符串)

     const char * cs = [s4 UTF8String];//const可省略

//文件内容:(文件路径:initWithContentsOfFile;用到中文就可用此编码:NSStringEncoding

     NSString *s5 = [[NSString alloc] initWithContentsOfFile(NSString *) encoding(NSStringEncoding) error(NSError *_autoreleasing *)]

例如:NSString *s5 = [[NSString alloc] initWithContentsOfFile@”/Users/Diana/apple/Desktop/1.txt” encodingNSStringEncoding)errornil]

//读取文件:(URL:读取资源路径;协议头://路径;file//;ftp//

     NSString *s6 = [[NSString alloc] initWithContentsOfURL(NSURL *) encoding(NSStringEncoding) error(NSError *_autoreleasing *)

//定义URLNSURL*url=[[NSURL alloc]initWithString:@”http://www.baidu.com”];或者:NSURL *url =[NSURL fileURLWithPath:@” /Users/Diana/apple/Desktop/1.txt”];

例如:NSString *s6 = [[NSString alloc] initWithContentsOfURLurl encodingNSStringEncoding errornil]

      一般都有一个类方法与对象方法配对;

NSURLè[NSURL URLWithString:(NSString *]

NSStringè[NSString stringWithFormat:@””];

      

3>     将字符串导出到文件中:(原子性操作,较安全【一旦中途失败,就终止操作】:atomically:YES

       [@”jack\njack” writeToFile:@” /Users/Diana/apple/Desktop/1.txt” atomically:YES encoding:NSUTF8StringEncoding error:nil]

4>      

3、NSMutableString(NSString子类)的使用:

1>     可变

     拥有父类的方法:

     NSMutableString *s1=[ NSMutableString stringWithFormat:@”age is 10”];

//拼接内容到s1后面

[s1 appendString:@” 11,12”];

//删除某个范围的字符

NSRange range = [s1 rangeOfString:@”is”];//找出is字符的范围

[s1 deleteCharactersInRange:range];//删除

      

2>      

4、集合类:NSArray/NSSet/NSDictionary  NSMUtableSet

1>     NSArray

      (父类)NSArray:不可变数组(数组创建时有几个元素就只有几个元素);

      (子类)NSMutableArray:可变数组;

      NSArray *array = [NSArray array];//空数组(创建时未指定个数,所以为空数组)

NSArray *array2 = [NSArray arrayWithObject:@”jack”];//一个对象

NSArray *array3 = [NSArray arrayWithObjects:@”jack”,@”rose”,nil];//多个对象,nil是数组元素结束的标记;

NSArray *array3 = @[@”jack”,@”rose”];//快速创建一个NSArray对象

[array count];//使用get方法count输出数据的个数

[array objectAtIndex:1];//(效率低)元素的访问

array[0];//根据下标查找数组内容(效率高)

 

 OC数组只能存放OC对象,不能存放非OC对象(如:int struct enum等);

 OC数组不能存放nil值;

⑤ 遍历:

。普通遍历:

for(int i = 0; i < array.count;i++)

{

NSLog(@”数组是:%@”,array[i]);

}

。快速遍历:(id obj代表数组中的每一个元素)

for(id obj in array)

{

NSUInteger i =[array indexOfObject:obj];//找出obj元素在数组中的位置

NSLog(@”数组是:%d”,obj);

}

。快速遍历2(推荐)

[array enumerateObjectsUsingBlock

//每遍历一个元素,就会调用block,并将当前元素和索引位置当做参数传给block

^(id obj,NSUInteger idx,BOOL *stop)

{

NSLog(@”下标是:%ld,数组是:%d”,idx,obj);

//停止遍历

*stop = YES;

}]

      

2>      

5、计算单个文件的代码行数(考察NSStringNSArrayNSFileManager的使用)

1>     文件管理者:NSFileManager

6、NSMutableArray可变数组的基本使用

1>     实例化:NSMutableArray * array = [NSMutableArray array];

2>     实例化并添加元素:NSMutableArray * array = [NSMutableArray arrayWithObjects:@”rose”,@”jim”,nil];

3>     添加数组元素:[array addObject:@”jack”];//可直接添加对象;

4>     删除元素:[array removeAllObjects];

5>     删除指定对象:[array removeObject:@”jack”];

6>     根据下标删除元素:[array removeObjectAtIndex:2];

7>     删除最后一个元素:[array removeLastObject];

8>     删除所有元素:[array removeAllObject];

9>     。。。。。。

7、NSSet基本使用(存放数据无顺序)

1>     实例化:NSSet *s = [NSSet set];//空数组

2>     实例化并添加元素NSSet * s2 = [NSSet setWithObjects:@”jack”,@”rose”,nil];

3>     输出元素个数:s2.count;

4>     随机返回一个元素:[s2 anyObject];

8、NSMutableSet基本使用:

1>     实例化:NSMutableSet *s =[NSMutableSet set];

2>     添加元素:[s addObject:@”jack”];

3>     删除元素:[s removeObject:@”jack”];

4>     删除所有元素:[s removeAllObject];

9、NSSetNSArray的对比:

1>     共同点:

     都是集合,都能存放多个OC对象;

     只能存放OC对象,不能存放非OC对象类型(基本数据类型:intfloatchar等,结构体、枚举);

     本身都不可变,且都有一个可变的子类;

2>     不同点:

     NSArray是有序的,NSSet是无序的;

3>      

10、字典NSDictionary的基本使用(不可变,无序):

1>     字典不允许有相同的key,但允许有相同的value(object);

2>     NSDictionary里面存储的东西都是键值对;

3>     实例化(存放一个键值对):NSDictionary *dict = [NSDictionary dictionaryWithObject:@”jack” forKey:@”name”];

4>     使用数组存放多个键值对:NSArray *keys = @[@”name”,@”address”];

NSArray *objects = @[@”jack”,@”北京”];

NSDictionary *dict = [NSDictionary dictionaryWithObject:objects forKey:@keys];

5>     实例化(不建议使用)NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@”jack”,@”name”,@”北京”,@”address”,nil];

6>     XCode简化上面5的实例化:NSDictionary *dict = @{@”name”:@”jack”,@”address”:@”北京”};

7>     访问字典中的内容:id obj = [dict objectForKey:@”name”];

8>     XCode简化访问字典中的内容:id obj = dict[@”name”];

9>     返回键值对个数:dict.count;

10>  

11、NSMutableDictionary的使用:

1>     实例化:NSMutableDictionary *dict = [NSMutableDictionary dictionary];

2>     添加键值对:[dict setObject:@”jack” forKey:@”name”];

3>     移除键值对:[dict removeObjectForKey:@”name”];

4>      

12、字典的遍历:

1>     //key数组:NSArray *keys = [dict allKeys];

For(int i = 0; i < dict.count; i++)

{

        NSString *key = keys[i];//取出key

        NSString *object = dict[key]; //取出key对应的值

}

2>     XCode简化上面遍历方法:

[dict enumerateKeysAndObjectsUsingBlock:

^(id key,id obj,BOOL *stop)

{

       NSLog(@”%@-%@”,key,obj);

       *stop = YES;

}];

13、集合总结:

1>     NSArray/NSMutableArray:

     有序;

     快速创建(不可变)@[];

     快速访问元素:数组名[i];

2>     NSSet/NSMutableSet:

     无序;

3>     NSDictionary/NSMutableDictionary:

     无序;

     快速创建:@{key1:value1,key2:value2}

     快速访问:字典名[key];

4>     字典定义多个key值时的另一种方式:

      NSArray *persons = @[

@{@”name”:@”jack”,@”qq”:@”23456788”},

@{@”name”:@”rose”,@”qq”:@”23456788”},

@{@”name”:@”jim”,@”qq”:@”23456788”},

] ;

     取值:NSDictionary *jim = persons[2];

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

14、NSNumber的使用(只能包装数字)

1>     NSNumber能包装基本数据类型为对象,是因为继承了NSValue

2>     OC集合不能存放基本数据类型,就使用NSNumber包装;

3>     包装int数据:NSNumber *num = [NSNumber numberWithInt10];

使用字典调用:NSDictionary *dict = @{@”name”:@”jack”,@”age”:num};

4>     获取封装后的基本数据:NSNumber *num2 = dict[@”age”];

5>     对象转换成基本数据类型:int a = [num2 intValue];

6>     XCode中简化上面2使用NSNumber将各种基本数据类型包装成NSNumber对象:包装基本数据:@基本数据(如:@20@YES@10.2@’A’);

7>     注意:@’A’NSNumber类型,@”A”NSString类型;

8>     age变量包装成NSNumber对象:int age = 100@(age);

9>      

15、NSValue的使用(可包装任何东西:枚举、结构体等):

1>     使用NSValue将结构体包装成OC对象:(例如结构体:CGPoint p = CGPointMake(10,10);)NSValue *value = [NSValue valueWithPoint:p];

2>     value转为对应的结构体:[value pointValue];

3>      

16、NSDate使用:

1>     创建时间对象(date为运行这句话时的0时区时间)NSDate *date = [NSDate date];

2>     创建比date5秒的时间对象:NSDate *date 2= [NSDate 达特WithTimeInterval5 sinceDate date];

3>     返回1970年开始走过的秒数:NSTimeInterval seconds = [date2 timeIntervalSince1970];

4>     日期格式化类:NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

设置格式(yMdmsH24h12小时):formatter.dateFormat = @”yyyy-MM-dd HH:mm:ss”;

打印输出格式后的:NSString * str = [formatter stringFromDate:date];


  ------- android培训iOS培训Java培训.NET培训期待与您交流! ----------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值