黑马程序员——Objective-C——Foundation框架1

来源:互联网 发布:淘宝文艺礼物店铺 编辑:程序博客网 时间:2024/05/16 04:39
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Foundation框架

一、Foundation框架是其他所有ios框架的基础。

二、Foundation框架包含了很多开发中常用的数据类型:结构体,枚举,类。

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

即可。

 

 

结构体

一、常用结构体:

         NSRange

         NSPoint\CGPoint

         NSSize\CGSize

         NSRect\CGRect

二、NSRange定义NSRange的定义

typedef struct _NSRange{   NSUInteger location;   NSUInteger length;} NSRange;


NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象长度。使用方式有3种。

 @"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==-1
  NSRange range = [str rangeOfString:@"java"];    NSLog(@"loc = %ld, length=%ld", range.location, range.length);

三、point、size、rect

         Point就是坐标,例如手机屏幕上的某一点即用坐标表示。

         Size是尺寸,长宽的尺寸。

         Rect包括以上两者信息。

//point结构体代码struc CGPoint{CGFloat x;//CGFloat就是double类型CGFloat y;};typedef struct CGPoint CGpoint;//size结构体代码struct CGSize{CGFloat width;CGFloat height;};typedef struct CGSize CGSize;//rectangles结构体代码struct CGRect{CGPoint origin;CGSize size;};
结构体的使用方法

int main(){    CGPoint p1 = NSMakePoint(10,10);    NSPoint p2 = CGPointMake(20, 20);// 最常用        NSSize s1 = CGSizeMake(100, 50);    NSSize s2 = NSMakeSize(100, 50);    CGSize s3 = NSMakeSize(200, 60);        CGRect r1 = CGRectMake(0, 0, 100, 50);    CGRect r2 = { {0, 0}, {100, 90}};    CGRect r3 = {p1, s2};// 使用CGPointZero等的前提是添加CoreGraphics框架    CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};            // CGSizeZero = CGRectZero表示原点        // CGPointZero == CGPointMake(0, 0)            // 将结构体转为字符串    //NSString *str = NSStringFromPoint(p1);        //NSString *str = NSStringFromSize(s3);        NSString *str = NSStringFromRect(r1);        NSLog(@"%@", str);            // NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);}CGRect myRect(CGFloat x, CGFloat y, CGFloat width, CGFloat height){    CGRect rect;    rect.origin.x = x;    rect.origin.y = y;    rect.size.width = width;    rect.size.height = height;        return rect;}}


 

NSString

一、NSString与NSMutableString都是oc中处理字符串的对象,他们之间的不同点在于前者不可更改,后者可以更改。

#import <Foundation/Foundation.h>int main(){        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"];    </span>      <span style="font-size:18px;">  NSLog(@"s1=%@, s2=%@", s1, s2);        return 0;}void stringExport(){    // 字符串的导出    [@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];            NSString *str = @"4234234";    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];    [str writeToURL:url atomically:YES </span><span style="font-size:18px;">encoding:NSUTF8StringEncoding error:nil];}void stringCreate(){        //字符串的创建    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];    </span> <span style="font-size:18px;">   // NSUTF8StringEncoding 用到中文就可以用这种编码    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];            // URL : 资源路径    // 协议头://路径    // file://    // ftp://    // http://weibo.com/a.png    // NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];    NSURL *url = [NSURL </span><span style="font-size:18px;">fileURLWithPath:@"/Users/apple/Desktop/1.txt"];        NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];    NSLog(@"s6=\n%@", s6);       // 一般都会有一个类方法跟对象方法配对     [NSURL URLWithString:<#(NSString *)#>];     [NSString stringWithFormat:@""];     [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];     


 

 

集合类

一、NSArry可以保存一组指向其他对象的指针。

#import <Foundation/Foundation.h>#import "Person.h" //NSArray :不可变数组//NSMutableArray : 可变数组int main(){    // @[] 只创建不可变数组NSArray    /* 错误写法    NSMutableArray *array = @[@"jack", @"rose"];        [array addObject:@"jim"];    */            //NSArray *array = @[@"jack", @"rose"];        return 0;}// 可变数组的基本使用void use3(){    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];            NSLog(@"%@", array);        NSLog(@"%ld", array.count);}// 遍历数组void use2(){    Person *p = [[Person alloc] init];        NSArray *array = @[p, @"rose", @"jack"];            for (int i = 0; i<array.count; i++)        {            NSLog(@"%@", array[i]);        }         id obj代表着数组中的每一个元素    int i = 0;        for (id obj in array)        {            // 找出obj元素在数组中的位置            NSUInteger i = [array indexOfObject:obj];                NSLog(@"%ld - %@", i, obj);            //i++;                if (i==1)           {                break;            }        }        [array enumerateObjectsUsingBlock:          // 每遍历到一个元素,就会调用一次block     // 并且当前元素和索引位置当做参数传给block     ^(id obj, NSUInteger idx, BOOL *stop)     {         NSLog(@"%ld - %@", idx, obj);                           if (idx == 0)         {             // 停止遍历             *stop = YES;         }              }];                void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)        {            NSLog(@"%ld - %@", idx, obj);                    if (idx == 0)            {                // 停止遍历                *stop = YES;            }        };            for (int i = 0; i<array.count; i++)        {            // 用来标记是否需要停止遍历            BOOL isStop = NO;                // 取出元素            id obj = array[i];                        myblock(obj, i, &isStop);                                   if (isStop)            {                break;           }        }}void use(){    /*     int a = 5;          int ages[10] = {1, 90, 89, 17};          Person *p = [[Person alloc] init];     Person *persons[5] = {p,  [[Person alloc] init]};     */        // 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];    // [array2 count];        //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];        // 快速创建一个NSArray对象    NSArray *array4 = @[@"jack", @"rose", @"4324324"];         //2.NSArray的元素个数    NSLog(@"%ld", array3.count);     //3.NSArray中元素的访问    NSLog(@"%@", [array3 objectAtIndex:1]);    //array3[1];    NSLog(@"%@", array3[0]);}


二、NSSet与NSArry对比,都是集合,都能存放多个oc对象,只能存放oc对象,不能存放非oc对象类型,本身都不可变,都有一个可变的子类。不同点在于,NSArry有顺序,NSSet没有顺序。

#import <Foundation/Foundation.h>int main(){    NSMutableSet *s = [NSMutableSet set];        // 添加元素    [s addObject:@"hack"];        // 删除元素    // [s removeObject:<#(id)#>];    return 0;}// set的基本使用void test(){    NSSet *s = [NSSet set];        NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];        // 随机拿出一个元素    NSString *str =  [s2 anyObject];        NSLog(@"%@", str);        //NSLog(@"%ld", s2.count);


0 0