[黑马程序员]15[Foundation框架] Foundation部分学习笔记小结

来源:互联网 发布:c语言经典第五版pdf 编辑:程序博客网 时间:2024/05/19 18:17

------- android培训、java培训、IOS培训、期待与您交流! ----------



Foundation框架] 基本介绍

 

01. Foundation框架基本

 

正如其名,Foundation框架是其他所有ios框架的基础

 

 Foundation框架包含了很多开发中常用的数据类型

 

结构体,枚举,类

 

 要想使用foundation中的数据类型,包含它的主文件即可#import<Foundation/Foundation.h>

 

 Foundation-结构体-01-NSRange// 字符串的起始位置和范围长度

 

 

 Foundation-03-NSPoint\CGPoint // 表示点的坐标,比如屏幕的触屏点

 

开发中用CGPoint,因为它跨平台

 

int main()

{

   

    // NSRange(location, length) //字符串的起始位置和范围长度

    // NSPoint\CGPoint          //表示点的坐标,比如屏幕的触屏点

    // NSSize\CGSize           // UI元素的尺寸

    // NSRect\CGRect          //包括CGSizeCGPoint,一个UI元素的位置和尺寸

   

    CGPoint p1 =NSMakePoint(10,10);

    NSPoint p2 =CGPointMake(20,20); //最常用

   

    NSSize s1 =CGSizeMake(100,50);

    CGSize s2 =NSMakeSize(100,50);

   

    CGRect r1 =CGRectMake(0,0, 100, 50);

   

    // CGPointZero == CGPointMake(0, 0);

   

    CGRect r4 = {CGPointZero,CGSizeMake(100,90)};

   

    CGPointEqualToPoint(p1, p2);// BOOL类型,判断两个点是否相同

   

    CGSizeEqualToSize(s1, s1);// 同上

   

    CGRectEqualToRect(r1, r4);// 同上

   

    // 使用这些函数的前提是添加CoreGraphics框架

   

    // NextStep Foundation

   

    BOOL i =CGRectContainsPoint(CGRectMake(50,40, 100, 50), CGPointMake(130,70));

   

    NSLog(@"%d",i);

   

    NSString *str =NSStringFromPoint(p1);

   

    NSString *str1 =NSStringFromSize(s1);

   

    NSString *str2 =NSStringFromRect(r1);

   

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

    //

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

   

    return0;

}

 

 

 

int test()

{

    // NSRange(location, length)

    // NSPoint\CGPoint

    // NSSize\CGSize          // UI元素的尺寸

    // NSRect\CGRect          //

   

    //   NSRange(location, length)

    //   @"i love oc";

    //

    //   location = 2(空格也算一个)

    //   length = 4

    //   struct Date {

    //       int year;

    //       int month;

    //       int day;

    //   };

    //

    //   struct Date d = {2011,9,10};

   

    //   @"i love oc"

    //

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

    //   NSRange r2 = {.location = 2, .length = 4}; //太麻烦,也不用

    //   NSRange r3 = NSMakeRange(2, 4); //应该这样定义

    //

   

    NSString *str =@"i love oc";

   

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

    // 如果找不到,length = 0, location =NSNotFound == -1

    NSRange range = [strrangeOfString:@"java"];

   

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

   

    return 0;

}

 

02. NSSet,

 

// NSSet无序存放的类集合

 

// NSSetNSArray的对比

// 1>共同点

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

// *只能存放OC对象,不能存放非OC对象类型

// *本身都不可变,都有一个可变的子类

 

// 2>不同点

// *NSArray有顺序,NSSet没有顺序

 

 

 

int main()

{

    NSMutableSet *s = [NSMutableSetset];

   

    // 添加元素

    [s addObject:@"hack"];

   

    // 删除元素

    [s removeObject:@"hack"];

   

    return0;

}

 

 

// NSSet用的比较少

 

int main1()

{

    NSSet *s = [NSSetset]; // 空的,不能加东西,因为不可变

   

    NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose",@"tom",@"haha",nil];

   

    // 取东西

    NSString *str = [s2anyObject];

   

    NSLog(@"%@",str);

   

    //NSLog(@"%ld",s2.count);

   

    return0;

}

 

03. NSDictionary,

 

// 三个类集合里最好用,最灵活的一个

 

 

// 字典的遍历

 

int main()

{

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

    // 字典是无序的

    NSDictionary *dict =@{@"name" :@"jack", @"qq" :@"234453456",@"address" :@"beijing", @"shouji" :@"136xxxxxx"};

   

    //   NSArray *keys = [dict allKeys];

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

    //

    //   for (int i =0; i<dict.count; i++) {

    //       NSString *key = keys[i];

    //       NSString *object = dict[key];

    //

    //       NSLog(@"%@ = %@",key,object);

    //   }

   

    // 第二种遍历方法  科学好用的方法

    [dict enumerateKeysAndObjectsUsingBlock:

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

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

        

         //*stop = YES;

     }];

   

    return0;

}

 

 

 

 

 

 

 

 

 

 

// 注意点

int main3()

{

    // 讲不可变字典赋值给可变字典,NSDictionary并没有setobject方法

    NSMutableDictionary *dict =@{@"name" :@"jack"}; // 错误写法

   

    [dict setObject:@"rose" forKey:@"name"];

   

    return0;

}

 

 

 

 

// NSMutableDictionary

int main2()

{

    NSMutableDictionary *dict = [NSMutableDictionarydictionary];

   

    // 添加键值对

    [dict setObject:@"jack" forKey:@"name"];

   

    [dict setObject:@"beijing" forKey:@"address"];

   

    [dict setObject:@"rose" forKey:@"name"];

   

    // 移除键值对

    //[dict removeObjectForKey:<#(id)#>];

   

    NSString *str = dict[@"name"];

    NSLog(@"%@",str);

   

    // 打印整个字典(键值对)

    NSLog(@"%@",dict);

   

    return0;

}

 

 

// 基本用法

int main1()

{

    // 字典

    // key->value

    // 索引->文字内容

    // 里面储存的东西都是键值对

   

    //NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];

   

    //   NSArray *keys = @[@"name",@"address"];

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

    //

    //   NSDictionary *dict = [NSDictionary dictionaryWithObjects:objectsforKeys:keys];

   

    //   NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

    //                         @"jack",@"name",

    //                          @"beijing",@"address",

    //                         @"1234234234",@"qq",nil];

   

    // xcode的封装,自动生成重复代码

    NSDictionary *dict =@{@"name": @"jack", @"address": @"beijing"}; // 字典的标准写法

   

    //   id obj = [dict objectForKey:@"address"];

    //封装上句

    id obj = dict[@"name"];// 封装后写法

   

    NSLog(@"%@",obj);

   

    //dict.count //返回的是键值对的个数

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

   

    return0;

}

 

04. NSNumber,

 

// 1.NSNumber

// 把基本数据类型包装成对象

// 之所以能转换包装,是因为继承了NSValue

 

 

// 2.NSValue

// 可以包装任何东西

 

int main()

{

    // 将结构体包装成对象

   

    // 结构体->OC对象

   

    CGPoint p =CGPointMake(10,10);

    // 将结构体转为value对象

    NSValue *value = [NSValuevalueWithPoint:p];

   

    // value转为相应结构体

    //[value pointValue];

   

    NSArray *array =@[value ];

   

    @"value";

   

    return0;

}

 

 

// NSNumber将各种基本数据类型包装成对象

int main2()

{

    // @2020包装成一个NSNumber对象

    // 将各种基本数据类型包装成对象

    NSArray *array =@[

                       @{@"name" : @"jack", @"age" : @20},

                       @{@"name" : @"jack", @"age" : @10.5},

                       @{@"name" : @"jack", @"age" : @YES},

                       @{@"name" : @"jack", @"age" : @'A'}

                      

                       ];

   

    // age变量包装成NSNumber对象

    int age =100;

    @(age);// @age计算机会把它当关键字

   

   

    NSNumber *n = [NSNumbernumberWithDouble:10.5];

   

    int d = [ndoubleValue];

   

   

    // 包装成字符串

    int a =20;

   

    NSString *str = [NSStringstringWithFormat:@"%d",a];

   

    NSLog(@"%d",[strintValue]);

   

    return0;

}

 

05. NSDate

 

// NSDate一个NSDate对象就可以表现一个时间

 

//

// 字符串转为时间

int main()

{

    NSString *time =@"2011/09/0815:34";

   

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    formatter.dateFormat =@"yyyy/MM/ddHH:mm";

   

    NSDate *date = [formatterdateFromString:time];

   

    NSLog(@"%@",date);

   

    return0;

}

 

 

 

// 日期格式化

 

int main2()

{

    NSDate *date = [NSDatedate];

   

    // 日期格式化类

    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];

    formatter.dateFormat =@"yyyy-MM-ddHH:mm:ss"; // 固定格式,小写hh12小时制

   

    // @2011-04-21 17:23:45

    NSString *str = [formatterstringFromDate:date];

   

    NSLog(@"%@",str);

   

    return0;

}

 

 

 

 

int main1()

{

    // 创建一个时间对象

    NSDate *date = [NSDatedate];

   

    // 打印出得时0时区的时间(北京-8)

    NSLog(@"%@",date);

   

    NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date];

   

    // 1970开始走过的秒数

    NSTimeInterval seconds = [date2timeIntervalSince1970];

   

    //[date2 timeIntervalSinceNow];

   

    NSLog(@"%@",date2);

   

   

   

    return0;

}

0 0