Foundation框架


结构体

1.NSRange

NSRange的本质是结构体,它包含两个成员变量——location 和length。它的作用就是表示一个范围,如:

 NSString *str = @"i love oc";

    NSRange range = [str rangeOfString:@"love"];// 查找某个字符串在str中的范围,如果找不到,length=0,location=NSNotFound==-1   

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

2.NSPoint\CGPoint

NSPoint无条件等价于CGPoint,下面列举常用的创建NSPoint\CGPoint的方法。

    CGPoint p1 = NSMakePoint(10, 10);

    NSPoint p2 = CGPointMake(20, 20);

其中第一种不常用,常用第二种方法来创建。

3. NSSize\CGSize

同样NSSize\CGSize也是等价的,创建方法如下:

NSSize s1 = CGSizeMake(100, 50);

NSSize s2 = NSMakeSize(100, 50);

CGSize s3 = NSMakeSize(200, 60);


4. NSRect\CGRect (CGPint CGSize)

NSRect\CGRect 包含上面所说的CGPint 和CGSize,常用创建方法:

CGRect r1 = CGRectMake(0, 0, 100, 50);
    
CGRect r2 = { {0, 0}, {100, 90}};

CGRect r3 = {p1, s2};

另外在oc中表示原点有两种方法:

(1)CGPointZero 

(2)CGPointMake(0, 0))

这两种方法都可以表示坐标原点。同样也有CGSizeZero和CGRectZero。

5.oc提供将结构体转换为字符串的方法:

    (1)NSString *str = NSStringFromPoint(p1);
    
   (2)NSString *str = NSStringFromSize(s3);
    
   (3) NSString *str = NSStringFromRect(r1);

字符串

1.NSString : 不可变字符串

创建:

(1)NSString *s1 = @"jack";

    
(2)NSString *s2 = [[NSString alloc] initWithString:@"zhang"];
    
(3)NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 25];

其中第二种几乎不用。

转换:

(1)C字符串 --> OC字符串

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

(2)OC字符串 --> C字符串

    const char *cs = [s4 UTF8String];

从文件中初始化字符串

    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/zhangjianbin/Desktop/zhang.txt" encoding:NSUTF8StringEncoding error:nil];
 
2. NSMutableString : 可变字符串

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

注意区分:

NSString *s2 = [NSString stringWithFormat:@"age is 10"];
    
NSString *s3 = [s2 stringByAppendingString:@" 11 12"];

这种看着好像NSString 也可以追加,但是它本质是生成了一个新的字符串,原来的字符串并没有改变。

oc数组

1.NSArray :不可变数组
创建:

NSArray *array2 = [NSArray arrayWithObject:@"zhang"];
    
    
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];

其中是数组元素结束的标记,不可省略
    
    NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    
    其实我们很少使用上面的方法,我们可以快速创建一个NSArray对象,如:

    NSArray *array4 = @[@"jack", @"rose", @"4324324"]; 
 但是这样创建出来的是不可变数组。
2.NSMutableArray : 可变数组

(1)创建:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"zhang", @"jian", nil];

(2)添加元素
    [array addObject:[[Person alloc] init]];
    
    [array addObject:@"bin"];
    
(3) 删除元素
    [array removeAllObjects];
    删除指定的对象
    [array removeObject:@"zhang"];
    [array removeObjectAtIndex:0];
    
(4)错误写法

    NSMutableArray *array = @[@"jack", @"rose"]; 

    因为快速创建数组的方法只适用于不可变数组。
    [array addObject:nil];

(5)遍历数组

NSMutableArray *array = @[@"jack", @"rose"];


 NSArray *array = @[@"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;
         }
         
     }];

3.NSSet

其实NSSet和NSArray差不多,只是NSSet中的存放时无序的。它们有很多共同点:

(1)都是集合,都能存放多个OC对象

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

(3)本身都不可变,都有一个可变的子类

字典

1.创建

(1)NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
    
    
(2)NSArray *keys = @[@"name", @"address"];

NSArray *objects = @[@"zhang", @"henan"];
    
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    
(3)NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"zhang", @"name",
     @"henan", @"address",
     @"123456", @"qq", nil];*/
    
    
(4) NSDictionary *dict = @{@"name" : @"zhang", @"address" : @"henan"};

第四种是快速创建,一般常用此方法。

2.成员访问

(1)id obj = [dict objectForKey:@"name"];

但是这种方法感觉麻烦,编译器给我们提供了另外一种更方便的方法:

 id obj = dict[@"name"];

其实他的本质也是生成上面的的代码。

NSNumber

我们知道在foundation中很多地方不让传入基本数据类型,只让传入对象,但是有时候我们很想传入基本数据类型,这个时候就应该想办法把基本数据类型转化为对象类型,如

NSNumber *num = [NSNumber numberWithInt:10];
    
    NSDictionary *dict =  @{
    @"name" : @"jack",
    
    
    @"age" : num
    
    };

这样我们就将10转化成了对象类型,同时我们还可以将它转化回来,如:

int a = [num intValue];

其实不仅仅是整形可以转化,其他基本数据类型如结构体,枚举,double,float等等数据类型也可以转化。这就要用到NSValue,其实NSNumber是继承自NSValue的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值