NSString,NSArray,NSSet,NSDictionary



一.字符串


1.字符串可以分为2类

(1)NSString(父类):不可变字符串。

(2)NSMutableString(子类):可变字符串


2.字符串的创建

(1)NSString *s2 = [[NSString alloc] initWithString:@"jack"];(不用)

(2)NSString *s1 =@"jack";(创建固定格式的字符串用这个)

(3)NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10];(创建的字符串需要传递变量格式)

(4)NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];(把C语言字符串转变成OC字符串的创建方式)。也可也用对象方法把OC字符串转换成C语言字符串:constchar *c  = [s4 UTF8String];

(5)NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil];(通过文件路径读取文件内容来创建字符串)

(6)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];

  NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];(根据URL读取URL地址的内容来创建字符串)


3.用类方法创建字符串

一般都会有一个类方法跟对象方法(init)配对来创建字符串。上面的那些方法可以全部替换成类方法创建对象

(1)[[NSString alloc] initWithString:@"jack"] == [NSString stringWithString:@"jack"] 

(2)[[NSString alloc] initWithFormat:@"age is %d"10] ==[NSString stringWithFormat:@"age is %d"10]

(3)[[NSString alloc] initWithUTF8String:"jack"]==[NSString stringWithUTF8String:"jack"]

(5)[[NSString alloc] initWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil]==

  [NSString stringWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil]

(6)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];

  [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil] ==等价于

  [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil


4.字符串的导出

(1)[字符串对象  writeToFile:@"文件路径" atomically:YES encoding:NSUTF8StringEncoding error:nil]:将这

个字符串写入这个文件里面去,会覆盖原来的数据,慎用。

(2)NSURL *url = [NSURL fileURLWithPath:@"URL路径"];

[字符串对象  writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]:将这个字符串写进

这个URL文件里面去。


5.NSMutableString方法

(1)[NSMutableString对象  appendString:字符串对象]:将后面的字符串拼接到前面对象的后面。

(2)[NSMutableString对象  deleteCharactersInRange:NSRange变量]:NSMutableString对象中删除NSRange变量表示范围的字符。


6.NSString方法

[NSString对象  stringByAppendingString:字符串对象]:将NSString对象和后面的字符串对象拼接返回一个新的OC字符串。


二.OC数组


1.数组可以分为2类

(1)NSArray(父类):不可变数组。

(2)NSMutableArray(子类):可变数组


2.OC数组只能存放OC对象,不能存放非0C对象(基本数据类型,枚举,结构体),OC数组不能存放nil值。


3.创建NSArray数组

(1)NSArray *array1 = [NSArray array](创建一个空数组,并且永远是空数组)

(2)NSArray *array2 = [NSArray arrayWithObject:@"jack"](创建永远只有一个元素的OC数组)

(3)NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose",nil](创建可以存放多个OC对象元素的数

组,nil是数组元素结束的标记,必须要有)

(4)最常用的创建NSArray对象的方法:

NSArray *array5 =@[@"jack",@"rose",@"4324324"](@加上[],中括号里面写OC数组的元素,这种创建方法只适合

NSArray对象的数组,可变数组不能用这种创建方式)

(5)NSArray的元素个数:可用[NSArray对象  count] 或者NSArray对象.count求出数组个数,因为在数组对象里面有

一个私有的_count成员变量(@property (readonly)NSUInteger count)


4.创建NSMutableArray数组

(1)最常见的创建方式:NSMutableArray *array3 = [NSMutableArray arrayWithObjects:@"jack"@"rose"nil]

(2)可变OC数组可以添加元素:[NSMutableArray对象 addObject:OC对象]

(3)删除整个数组:[NSMutableArray对象 removeAllObjects]

(4)删除1个数组元素[NSMutableArray对象  removeObject:@"jack"](删除完后后面的排序会向前一位)

(5)根据数组下标删除一个数组元素:[NSMutableArray对象 removeObjectAtIndex:数字]

(6)错误写法:[NSMutableArray对象  addObject:nil](OC数组里面存放的是OC对象,nil是数组的结束标志)


5.遍历数组的方法

OC数组里面的每个元素可用数组名和下标访问(和C语言数组一样)

(1)用一个for循环遍历所有数组每个元素

for (int i = 0; i<array.count; i++)
      {
          NSLog(@"%@", array[i]);
      }
(2)用一个for (id obj in array)遍历每个元素

int i = 0;
for (id obj in array) // 定义一个id类型的变量obj,挨个访问数组array里面的元素,并把值赋给obj。
{

    NSUInteger i = [array indexOfObject:obj]; //这个对象方法可以根据元素值求出元素的下标。

    NSLog(@"%ld - %@", i, obj);
    i++;

}

(3)用block遍历每个元素

[array enumerateObjectsUsingBlock:
     
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);
         
         
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }
         
     }];

6.数组中元素访问

数组是有顺序的,根据创建顺序,每个下标对应一个元素

(1)[NSMutableArray对象 objectAtIndex:下标数字]:根据下标数字用对象方法访问元素

(2)NSMutableArray对象[下标数字]:和C数组一样直接根据下标数字访问。


7.OC数组是个对象可以%@输出字符数组对象,输出的结果是:(元素1的值.......)。


三.NSSet(集合)


1.NSSet可以分为2类

(1)NSSet(父类):不可变集合。

(2)NSMutableSet(子类):可变集合


2.NSSet的创建方式(和数组创建很类似,但是不能直接赋值(@[])):

[NSSet setWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];


3.因为集合是没有顺序的,里面的没有元素没有对应下标,取出集合元素只能随机取:

[NSSet对象  anyObject]


4.集合个数

可以用成员变量_count的get方法或者点语法取出集合里面有几个元素


5.NSMutableSet对象的添加和删除元素的方法

(1)添加元素:[NSMutableSet对象  addObject:OC对象]

(2)删除元素(直接删除值得方法):[NSMutableSet对象  removeObject:OC对象]


6.NSSetNSArray的对比

共同点:

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

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

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

不同点:

NSArray有顺序,NSSet没有顺序


四.NSDictionary(字典)


1.NSDictionary可以分为2类

(1)NSDictionary(父类):不可变字典。

(2)NSDictionary(子类):可变字典


2.字典里面存的值是没有顺序的,但是存放的都是键值对:索引--->文字内容(key--->value)


3.字典的创建方式

(1)创建只有1个元素的字典:[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

(2)创建数组方式的字典:[NSDictionary dictionaryWithObjects:存放值得数组对象  forKeys:存放键的数组对象]

(3)创建直接多个元素的字典:[NSDictionary dictionaryWithObjectsAndKeys: 值1对象, 键1对象",值1对象, 键1对象"....,nil]

(4)最常用的创建方式:@{键1对象 :值1对象,键2对象 : 值2对象......};


4.根据键取值

(1)[NSDictionary对象  objectForKey:键对象]:返回值是值对象。

(2)最常用的方法:NSDictionary对象[键对象]

 

5.求里面元素的个数

根据成员变量_count的get方法或者点语法求出元素个数,这元素个数指的键值对的个数。


6.NSMutableDictionary对象的添加和删除

(1)添加键值对:[NSMutableDictionary对象  setObject:@"jack" forKey:@"name"],添加的如果是同一个键,则会覆盖原来的值。字典不允许有相同的key,但允许有相同的valueObject

(2)移除键值对(根据键删除键值对):[NSMutableDictionary对象  removeObjectForKey:键对象]


7.字典的遍历

(1)for循环遍历

 NSArray *keys = [dict allKeys]; // 用对象方法allkeys获得所有键,返回的是一个数组
    
        for (int i = 0; i<dict.count; i++)
        {
            NSString *key = keys[i];    
            NSString *object = dict[key];
    
    
            NSLog(@"%@ = %@", key, object);
        }

(2)用block变量字典

[dict enumerateKeysAndObjectsUsingBlock:
     ^(id key, id obj, BOOL *stop) {
         NSLog(@"%@ - %@", key, obj);
         
        
     }];


五.总结


1.NSArray\NSMutableArray(数组)

(1)有序

(2)快速创建(不可变):@[obj1, obj2, obj3]

(3)快速访问元素:数组名[i]

2.NSSet\NSMutableSet(集合)

无序

3.NSDictionary\NSMutableDictionary(字典)

(1)无序

(2)快速创建(不可变):@{key1 : value1,key2 : value2}

(3)快速访问元素:字典名[key]



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值