iOS开发-OC-Foundation框架

一、Foundation—基础框架
框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础。

1.范围 NSRange

//NSRange的定义
typedef struct _NSRange {
    NSUIntegerlocation;
    NSUIntegerlength;
} NSRange;

//创建一个NSRange
NSMakeRange(NSUInteger loc, NSUInteger len)

//判断一个点是否在里面
BOOL NSLocationInRange(NSUInteger loc, NSRange range)

//判断是否相等
BOOL NSEqualRanges(NSRange range1, NSRange range2)

举例说明NSRange的用法

#import <Foundation/Foundation.h>

int main()
{
    //定义一个range
    NSRange range = NSMakeRange(0, 3);
    //输出range的location和length
    NSLog(@"%ld--%ld",range.location,range.length);

    //查找某个字符串再另一个字符串的范围
    NSString *str = @"just a demo";
    //查找
    NSRange range2 = [str rangeOfString:@"a"];
    //输出
    NSLog(@"%ld,%ld",range2.location,range2.length);

    return 0;
}

2.点 NSPoint和CGPoint

<span style="font-size:18px;">struct CGPoint {
  CGFloat x;
  CGFloat y;
};

typedef struct CGPoint CGPoint;</span>

举例说明使用

<span style="font-weight: normal;"><span style="font-size:18px;"> <span style="font-weight: normal;">//NSPointCGPoint的创建类似
 NSPoint point =NSMakePoint(10, 10);
    CGPoint point2 = CGPointMake(12, 12);
    //注意 x 和 y 是 double 类型
    NSLog(@"%f,%f",point.x,point.y);
    NSLog(@"%f,%f",point2.x,point2.y);
//判断两点是否相等
 BOOL b = CGPointEqualToPoint(point, point2);
    NSLog(@"%d",b);</span></span></span>

3.尺寸 NSSize和CGSize

<span style="font-size:18px;">struct CGSize {
  CGFloat width;
  CGFloat height;
};</span>

举例说明使用

<span style="font-size:18px;">   //创建 size
    NSSize size =NSMakeSize(10, 12);
    CGSize size2 = CGSizeMake(11, 10);
    //打印 size
    NSLog(@"%@",NSStringFromSize(size2));
    NSLog(@"%f,%f",size.width,size.height);</span>

4.矩形 NSRect和CGRect

<span style="font-size:18px;">struct CGRect {
  CGPoint origin;
  CGSize size;
};

typedef struct CGRect CGRect;</span>

常用方法举例



    //创建 CGRect 和 NSRect
    NSRect rect = NSMakeRect(0, 0, 10, 10);
    CGRect rect2 = CGRectMake(0, 0, 5, 5);

    //判断两个 rect 是否相同
    BOOL b = CGRectEqualToRect(rect, rect2);
    //判断一个 rect 是否包含另一个 rect
    BOOL b2 = CGRectContainsRect(rect, rect2);
    //判断点是否在 rect 内
    BOOL b3 = CGRectContainsPoint(rect2, NSMakePoint(5, 5));

    //打印判断结果
    NSLog(@"%d,%d,%d",b,b2,b3);

二、字符串 NSString和NSMutableString

1.NSString

<span style="font-size:18px;">//快速创建
    NSString *str = @"this is just a demo";
    //格式化创建
    int a=2;
    NSString *str2 = [[NSString alloc]initWithFormat:@"this is a demo%d",a ];

    NSString *str3= [[NSString alloc]initWithUTF8String:"just a demo"];

    //从文件中加载
    NSString *str4 = [[NSString alloc]initWithContentsOfFile:@"/Users/shmily/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];

    //从 url 中加载
    NSURL *url = [NSURL URLWithString:@"file:///Users/shmily/Desktop/1.txt"];
    NSString *str5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"%@\n%@\n%@\n%@\n%@",str,str2,str3,str4,str5);</span><span style="font-size: 24px;">
</span>

2.NSMutableString

NSMutableStirng继承自NSString,所以NSString有的方法,NSMutableString都有,唯一不同的是,NSMutableString是可变字符串,当初始化完成后可以继续修改改字符串的内容,NSString是不可变字符串,一旦初始化完成,就不能再修改其内部的值.

使用举例

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

    // 获取is的范围
    NSRange range = [s1 rangeOfString:@"is"];
    [s1 deleteCharactersInRange:range];
    NSString *s2 = [NSString stringWithFormat:@"age is 10"];
    //添加字符串到指定已有字符串
    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];     
    NSLog(@"s1=%@, s2=%@", s1, s2);

三、NSArray 和NSMutableArray

1.NSArray

不可变对象数组的使用

//NSArray的创建

    NSArray *array1 = [NSArray arrayWithObject:@"jack"];
    // nil是数组元素结束的标记
    NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"rose", nil];      
   //快速创建一个NSArray对象

    NSArray *array4 = @[@"jack", @"rose", @"4324324"];

    //NSArray的元素个数
    NSLog(@"%ld", array3.count);

    //NSArray中元素的访问
    NSLog(@"%@", [array3 objectAtIndex:1]);

    //快速访问
    NSLog(@"%@", array3[0]);
}

2.NSMutableArray

可变对象数组的使用

<span style="font-size: 18px;">   </span><span style="font-size:14px;"> // @[] 只创建不可变数组NSArray

    // 常见错误写法
    NSMutableArray *array = @[@"jack", @"rose"];
   [array addObject:@"jim"];//因为快速创建的NSArrray是不可变的

   // 可变数组的基本使用
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

     // 添加元素
    [array addObject:[[Person alloc] init]];  
    [array addObject:@"jack"];

 // 删除元素
    [array removeAllObjects];

    // 删除指定的对象
    [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];

    // 错误写法
    // [array addObject:nil]; //nil是NSArray的结束标志</span>

四、NSDictionary和NSMutableDictionary
1.NSDictionary

//字典的定义
//NSDictionary定义一个键值对
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//NSDictionary定义多个键值对
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil];
//快速定义字典(只能用于不可变字典)
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

//字典的键值对获取
id obj = dict[@"name"];

2.NSMutableDictionary

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"]; 
[dict setObject:@"北京" forKey:@"address"];

// 移除键值对
[dict removeObjectForKey:(id)];

// 字典不允许有相同的key,但允许有相同的value(Object)
    // 字典的无序的
    NSDictionary *dict = @{
    @"address" : @"北京",
    @"name" : @"jack",
    @"name2" : @"jack",
    @"name3" : @"jack",
    @"qq" : @"7657567765"};

//打印所有的字典的键值对
[dict enumerateKeysAndObjectsUsingBlock:
     ^(id key, id obj, BOOL *stop) {
         NSLog(@"%@ - %@", key, obj);

         // *stop = YES;
     }];

五.NSNumber
1.将各种基本数据类型包装成NSNumber对象.

// 将age变量包装成NSNumber对象
    int age = 100;
    @(age);
    //[NSNumber numberWithInt:age];

//将基本数据类型包装成NSNumber对象
NSNumber *num = [NSNumber numberWithInt:10]; 
NSNumber *n = [NSNumber numberWithDouble:10.5];

2.将NSNumber对象转化成基本数据类型

//将NSNumber对象转为基本数据类型
//转为int
int a = [number intValue];

//转为double
double d = [number doubleValue];

3.将基本数据类型快速包装成NSNumber对象

// 将各种基本数据类型包装成NSNumber对象
    @10.5;
    @YES;
    @'A'; // NSNumber对象

    //注意@'A'和@"A"的区别
    @"A"; // NSString对象

六、NSDate
1.创建一个NSDate对象

// 创建一个时间对象
 NSDate *date = [NSDate date];
 // 打印出的时候是0时区的时间(北京-东8区)
 NSLog(@"%@", date);

NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
 // 从1970开始走过的秒数
    NSTimeInterval seconds = [date2 timeIntervalSince1970];

2.日期格式化

//日期格式化
NSDate *date = [NSDate date];   

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

// y 年  M 月  d 日
// m 分 s 秒  H (24)时  h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

//将date转化为formatter对应格式的字符串 
NSString *str = [formatter stringFromDate:date];

3.将制定格式的字符串转为date对象

// 09/10/2011
NSString *time = @"2011/09/10 18:56";
//实现一个 NSDateFormatter 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//设置日期格式
formatter.dateFormat = @"yyyy/MM/dd HH:mm";

//根据设置的日期格式将字符串转为日期
NSDate *date = [formatter dateFromString:time];

七、NSValue

之前说过的NSNumber实际上是NSValue的一种特殊形式.
NSValue可以将基本数据类型包装成OC对象.比如:

CGPoint p = CGPointMake(10, 10);
// 将结构体转为Value对象
NSValue *value = [NSValue valueWithPoint:p];

我们可以看出,实际上使用NSValue转化的方法的命名格式为
NSValue *value = [NSValue valueWith + 对应的数据类型(int,point,rect等)];

将NSValue转化为基本数据类型的方式和NSNumber相似,可以总结为
基本数据类型 变量名 = [NSValue对象 基本数据类型 + Value];

学习心得:
通过本章知识点的学习和理解,foundation框架中有很多有用的、面向数据的简单类和数据类型,提供了许多集合类,一些对象都是不可变的,这个框架提供了这些类的可变版本,可以随意更改他们的内容,是的编程更加便捷,高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值