Object-C-Foundation框架

来源:互联网 发布:海鹰数据网站 编辑:程序博客网 时间:2024/06/05 18:50

一、NSRange

NSRange是一个结构体,有两个属性,location和range。

#import <Foundation/Foundation.h>int main(){    // @"i love oc" // love的范围    // 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    NSRange range = [str rangeOfString:@"love"];    NSLog(@"loc=%ld, length=%ld", range.location, range.length);    return 0;}

二、Point、Size和Rect

这三个的本质都是结构体。

Point表示一个点,有x和y两个属性。

Size表示一个矩形面,有height和width连个属性。

Rect表示一个有位置坐标的矩形面,有Point和Size两个属性。

#import <Foundation/Foundation.h>#import <CoreGraphics/CoreGraphics.h>int main(){/* (CG***是跨平台的) NSPoint\CGPoint NSSize\CGSize NSRect\CGRect (CGPoint origin, CGSize size) */    // 使用这些函数的前提是添加CoreGraphics框架    // 比较两个点是否相同(x、y)    BOOL b = CGPointEquitToPoint(CGPointMake(10, 10), CGPointMake(10, 10));    // CGRectEqualToRect    // CGSizeEqualToSize    BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(130, 70));    return 0;}void point(){    CGPoint p1 = NSMakePoint(10, 10);    NSPoint p2 = CGPointMake(20, 20); // 最常用    NSSize S1 = NSMakeSize(100, 50);    NSSize s2 = CGSizeMake(100, 50);    CGSize s2 = CGSizeMake(150, 60);    CGRect r1 = CGRectMake(0, 0, 100, 50);    CGRect r2 = {{0, 0}, {100, 90}};    CGRect r3 = {p1, s2};    CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};    // 表示原点    CGPointZero == CGPointMake(0, 0)    // 将结构体转换为字符串    // NSString *pointStr = NSStringFromPoint(p1);    // NSString *sizeStr = NSStringFromSize(s3);    // NSString *rectStr = NSStringFromRect(r1);    NSLog(@"%@", pointStr);}


三、NSString和NSMutableString

NSMutableString是NSString的子类,这两个类最大的不同就是NSMutableString是可变的字符串,而NSString是不可变的字符串。

#import <Foundation/Foundation.h>/* NSString:不可变字符串 NSMutableString:可变字符串 */int main(){    NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];    //拼接内容到s1的后面    [s1 appendFormat:@" 11 12"];    // 获取is的范围    NSRange range = [s1 rangeOfString:@"is"];    [s1 deleteCharactersInRange:range];    NSString *s2 = [NSString stringWithFormat:@"age is 10"];    // s2内容不变,会创建新的字符串    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];    NSLog(@"s1=%@, s2=%@", s1, s2);    return 0;}void stringCreate(){    /*     1.字符串的创建     */    NSString *s1 = @"jack";    // NSString *S2 = [[NSString alloc] initWithString:@"jack"];    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];    // C字符串 --> OC字符串    NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];    // OC字符串 --> C字符串    const char *cs = [s4 UTF8String];    // NSUTF8StringEncodingn 用到中文就可以用这种编码    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"绝对路径" encoding:NSUTF8StringEncoding error:nil];    NSLog(@"\n%@", s5);    // URL:资源路径    // 协议头://路径    // file://    // ftp://    // http://weibo.com/a.png    NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];    [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];    NSString *s6 = [[NSString alloc] initWithContentOfURL:url encodingn:NSUTF8StringEncoding error:nil];    /*     一般都会有一个类方法跟对象方法配对    [NSURL URLWithString:@"file:///Users/apple/Desktop/1.txt"];    [NSString stringWithFormat:@""];    [NSString stringWithContentsOfFile:@"" encoding:NSUTF8StringEncoding error:nil];     */}void stringExport(){    // 字符串的导出    [@"Jack\nJack" writeToFile:@"/Users/apple/desktop/my.txt" atomially:YES encoding:NSUTF8StringEncoding error:nil];    NSString *str = @"1234567";    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/desktop/my.txt"];    [str writeToURL: url atomically:YES encoding:NSUTF8StringEncoding error:nil];}

四、NSArray和NSMutableArray

NSArray和NSMutableArray是可以存放任何OC对象的有序集合,NSMutableArray是NSArray的子类,NSMutableArray是长度可变的集合,而NSArray是长度不可变的集合。

#import <Foundation/Foundation.h>#import "Person.h"int main(){    // @[] 只创建不可变数组NSArray    /* 错误写法     NSArray *array = @[@"Jack", @"Rose"];     [array addObject:@"xxx"];     */    return 0;}void use(){    // OC数组不能存放nil值    // OC数组只能存放OC对象,不能存放非OC对象类型,比如int、struct、enum等    // 这个array永远是空数组    // NSArray *array = [NSArray array];    /*     1.NSArray的创建     */    NSArray *array2 = [NSArray arrayWithObject:@"jack"];    // nil是数组元素结束的标记    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];    // 快速创建一个NSArray对象    NSArray array4 = @[@"jack", @"rose", @"tom"];    /*     2.NSArray的元素个数     */    [array3 count];    array3.count;    /*     3.NSArray中元素的访问     */    [array3 objectAtindex:1]; // @"rose"    // array3[1]; // 编译器特性,会自动转换成上边一行的代码}// 遍历数组void use2(){    Person *p = [[Person alloc] init];    NSArray *array = @[p, @"Jack", @"Rose"];/*    for (int i = 0; i<array.count; i++)    {        NSLog(@"%@", array[i]);    }*//*    // 快速遍历    // id obj代表着数组中的每一个元素    for (id obj in array)    {        // 找出Object元素在数组中的位置        NSUInteger i = [array indexOfObject:obj];        NSLog(@"%d - %@", i, obj);    }*/    // 每遍历到一个元素,就会调用一次block    // 并且当前元素和索引位置当作参数传给block    [array enumerateObjectsUsingBlock:     ^(id obj, NSUInteger idx, BOOL *stop)    {        NSLog(@"%ld - %@", idx, obj);        if (idx == 1)        {            // 停止遍历            *stop = YES;        }    }];}// 可变数组的基本使用void use3(){    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Rose", @"Tom", nil];    // 添加元素    [array addObject:[[Person alloc] init]];    [array addObject:@"jack"];    // 删除元素    [array removeAllObjects];    // 删除指定对象    [array removeObject:@"jack"];    [array removeObjectAtIndex:2];    // 错误写法    // [array addObject:nil];}


五、NSSet和NSMutableSet

NSSet和NSMutableSet都是可以存放任何OC对象的无序集合。其中,NSMutableSet是NSSet的子类,NSSet是长度不可变的,而NSMutableSet是长度可变的。

/* NSSet和NSArray对比 1> 共同点  * 都是集合,都能存放多个OC对象  * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)  * 本身都不可变,都有一个可变的子类 2> 不同点  *NSArray有序,NSSet没有顺序 */#import <Foundation/Foundation.h>int main(){    NSMutableSet *s = [NSMutableSet set];    // 添加元素    [s addObject:@"hack"];    // 删除元素    [s removeObject:@"hack"];    return 0;}void test(){    NSSet *s = [NSSet set];    NSSet *s2 = [NSSet setWithObjects:@"Jack", @"Rose", @"Tom", @"Jake", nil];    // 随机拿出一个元素    NSString *str = [s2 anyObject];    NSLog(@"%@", str);}

六、NSDictionary和NSMutableDictionary

Dictionary是一个字典类型集合,存放的都是键值对,跟Java中的Map集合类似。其中NSDictionary是不可变的Dictionary,而NSMutableDictionary是可变的Dictionary,后者是前者的子类。

#import <Foundation/Foundation.h>int main(){    // 字典不允许有相同的key,但允许有相同的value(object)    // 字典是无序的    NSDictionary *dict = @{@"address" : @"北京", @"name" : @"jack", @"name2" : @"jack", @"name3" : @"jack", @"qq" : @"61766536"};/*    NSArray *keys = [dict allKeys];    for (int i = 0; i<dict.count; i++)    {        NSString *key = keys[i];        NSString *obj = dict[key];        NSLog(@"%@ = %@", key, obj);    }*/    [dict enumerateKeysAndObjectsUsingBlock:     ^(id key, id obj, BOOL *stop) {        NSLog(@"%@ - %@", key, obj);        // *stop = YES;    }];    return 0;}// 不可变dictionary的使用void use(){    /*     字典:     key --> value     索引 --> 文字内容     里面存储的东西都是键值对     */    // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];/*    NSArray *keys = @[@"name", @"address"];    NSArray *objects = @[@"jack", @"北京"];    NSDictionary *dict = [NSDictionary dictionaryWithObjects:keys forKeys:objects];*//*    NSDictionary *dict = [NSDictionary dictionaryWithOvjectsAndKeys:@"Jack", @"name", @"北京", @"address", @"61766536", @"qq", nil];*/    NSDictionary *dict = @{@"name" : @"Jack", @"address" : @"北京"};    // id obj = [dict objectForKey:@"name"];    id obj = dict[@"name"];    NSLog(@"%@", obj);    // 返回的是键值对的个数    NSLog(@"%ld", dict.count);}// 可变Dictionary的使用void use2(){    NSMutableDictionary *dict = [NSMutableDictionary dictionary];    // 添加键值对    [dict setObject:@"jack" forKey:@"name"];    [dict setObject:@"北京" forKey:@"address"];    // 重复给同一个键赋值时,会覆盖之间的值    [dict setObject:@"rose" forKey:@"name"];    // 一处键值对    // [dict removeObjectForKey:(id)];    NSString *str = dict[@"name"];    NSLog(@"%@", str); // 输出为rose    NSLog(@"%@", dict);}

七、NSNumber和NSValue

NSNumber主要用于将基本数据类型和OC对象类型进行互相转换,类似于Java中的包装类。

通常用在向OC数组这类数据结构中添加元素,因为OC数组中只能存储OC对象。

#import <Foundation/Foundation.h>int main(){    // @20 将20包装成一个NSNumber对象    NSArray *array = @[    @{@"name" : @"jack", @"age" : @20},    @{@"name" : @"tom", @"age" : @21},    @{@"name" : @"rose", @"age" : @18}    ];    // 将各种基本数据类型包装成NSNumber对象    @10.5;    @YES;    @'A'; // NSNumber对象    @"A"; // NSString对象    // 将age变量包装成NSNumber对象    int age = 100;    @(age);    NSNumber *n = [NSNumber numberWithDouble:10.5];    double d = [n doubleValue];    int a = 20;    // int --> NSString    NSString *str = [NSString stringWithFormat:@"%d", a];    // NSString --> int    [@"20" intValue];    NSLog(@"%d", [@"12321" intValue]);    return 0;}void test(){    NSNumber num = [NSNumber numberWithInt:10];    NSDictionary *dict = @{    @"name" : @"jack",    @"age" : num,    };    NSNumber num2 = dict[@"age"];    int a = [num2 intValue];    NSLog(@"%d", a);}
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue。

NSValue主要用来将结构体类型包装成OC对象。

#import <Foundation/Foundation.h>int main(){    // 结构体 --> OC对象    CGPoint p = CGPointMake(10, 10);    // 将结构体转为Value对象    NSValue *value = [NSValue valueWithPoint:p];    // 将value转为对应的结构体    // [value pointValue];    NSArray *array = @[value];        return 0;}

八、NSDate

NSDate是一个用于存放时间类型的数据结构。

在进行时间格式和字符串格式转换的时候通常会用到一个日期格式化类NSDateFormatter。

#import <Foundation/Foundation.h>int main(){    return 0;}void use(){    // 创建一个时间对象    NSDate *date = [NSDate date];    // 打印出的时间是0时区的时间    NSLog(@"%@", date);    NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];    // 从1970年开始走过的秒数    NSTimeInterval seconds = [date2 timeIntervalSince1970];    // [date2 timeIntervalSinceNow];}// 日期 转换成 字符串void date2string(){    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";    NSString *str = [formatter stringFromDate:date];    NSLog(@"%@", str);}// 字符串 转换成 日期void string2date(){    NSString *time = @"2015/04/01 18:18";    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    formatter.dateFormat = @"yyyy/MM/dd HH:mm";    NSDate *date = [formatter dateFromString:time];    NSLog(@"%@", date);}

0 0