OC課程-017: NSMutableString NSArray NSMutableArray

二、NSMutableString


176.NSMutableString

1). 是Foundation框架中的一個類,從NSString繼承,是用來存儲字符串?dāng)?shù)據(jù)的.
2). NSMutableString在父類NSString的基礎(chǔ)之上做擴展,
存儲在NSMutableString對象中的數(shù)據(jù)具有可變性,不會新創(chuàng)建對象.


177. NSMutableString的用法

1). 創(chuàng)建對象:
NSMutableString *str = [NSMutableString string];
[str appendString:@"jack"]; // 追加字符串。
2). 往可變字符串對象中追加字符串:

(void)appendString:(NSString *)aString;// 直接追加內(nèi)容
(void)appendFormat:(NSString *)format...;// 以拼接的方式往可變字符串對象中追加內(nèi)容

3). 創(chuàng)建NSMutableString對象時,不能使用如下方式:
NSMutableString *str = @"jack";
4). NSMutableString做大批量的字符串拼接,速度快,因為NSMutableString只有一個,每次修改的時候直接修改對象的內(nèi)容。
NSMutableString是從NSString繼承,在使用NSString的地方,完全可以使用NSMutableString。

6. 使用建議

1). 平時使用,還是使用NSString,因為效率高。
第二次使用同1個字符串,不需要再創(chuàng)建,可直接使用。

    NSString *str1 = @"jack";
    NSString *str2 = @"jack";

2). 大批量的數(shù)據(jù)拼接的時候使用NSMutableString
10次以上使用NSMutableString. 此時NSString拼接,效率低下。


178. NSArray的用法

1. NSArray,具備數(shù)組功能。是OC中的數(shù)組。

1). 是Foundation框架中的一個類,用來存儲多個數(shù)據(jù),具備數(shù)組功能,所以NSArray是OC中的數(shù)組
2). NSArray的特點:
a. 只能存儲OC對象
b. 長度固定, 一旦NSArray數(shù)組創(chuàng)建完畢之后,元素的長度固定,無法新增、刪除元素.
c. 每一個元素都是緊密相連的,每一個元素仍然有自己的下標(biāo).
d. 元素的類型是id類型的.只能存OC對象類型。

3). NSArray數(shù)組的創(chuàng)建:
1). 因為是一個類,所以就是創(chuàng)建NSArray對象.

NSArray *arr1 = [NSArray new]; 
NSArray *arr2 = [[NSArray alloc] init];
NSArray *arr3 = [NSArray array];

這樣創(chuàng)建出來的NSArray數(shù)組的元素的個數(shù)是0個,因為長度固定,所以沒有任何意義.
2). 創(chuàng)建數(shù)組的同時指定一個數(shù)組的元素,仍然沒有意義
NSArray *arr1 = [NSArray arrayWithObject:@"jack"];
3). 最常用創(chuàng)建NSArray數(shù)組的方式.

  • (instancetype)arrayWithObjects:(ObjectType)firstObj,...
    NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lili",nil];
    4). 創(chuàng)建NSArray簡要方式
    NSArray *arr = @[@"jack", @"rose", @"lili"];
    5). 使用注意
    a. 只能存儲OC對象,不能存儲非OC對象
    b. 將元素寫完之后,最后要寫一個nil,表示元素到此結(jié)束了

179. NSArray的用法

  1. 在NSLog函數(shù)中使用%@可以直接輸出 NSArray對象中的所有元素的值。
  2. NSArray數(shù)組中不能存儲基本數(shù)據(jù)類型。不能存儲非OC對象。
    nil的本質(zhì)其實就是0,所以nil無法存儲到NSArray數(shù)組中。
  3. 可以通過下標(biāo)index,取出數(shù)組中的值。
  4. 得到數(shù)組中元素的個數(shù):arr.count;
  5. 判斷數(shù)組中是否有指定元素:[arr containsObject:@"lily"];
  6. 第一個元素:arr.firstObject
  7. 最后元素:arr.lastObject
  8. 查找數(shù)組中第一次出現(xiàn)item的下標(biāo)。
    indexOfObject,如果沒找到,返回的是NSUInteger的最大值。

180. NSArray的用法

NSArray數(shù)組的編譯
1). for循環(huán)
原理: 將下標(biāo)挨個遍歷出來

    NSArray *arr = @[@"jack",@"rose"];
    for(int i=0;i<arr.count;i++){
        //NSLog(@"%@",arr[i]);
        NSLog(@"%@", [arr objectAtIndex:i]);
    }

2). 使用增強for循環(huán)
a. 語法格式:
for(元素類型 變量名 in 數(shù)組名){
直接通過變量名拿到數(shù)組中的每一個元素
}

NSArray *arr = @[@"jack",@"rose"]; 
for(NSString *str in arr){
     NSLog(@"%@", str); 
}

b. 聲明在for()中的變量叫做迭代變量
c. 執(zhí)行變量
將數(shù)組中的第一個元素的值賦值給迭代變量,執(zhí)行循環(huán)體
...
結(jié)束循環(huán)
d. 語法總結(jié)
-> 迭代變量的類型和數(shù)組中的元素的類型保持一致
-> 迭代變量的名稱可以任意取
-> in是固定的
-> 遍歷那個數(shù)組就將數(shù)組寫在in后面
-> 循環(huán)體里面,迭代變量的值就是元素的值

當(dāng)NSArray數(shù)組中存儲的數(shù)據(jù)類型不一致的時候,迭代變量的類型建議使用id類型

3). 使用block遍歷:enumerateObjectsUsingBlock
(void) enumerateObjectsUsingBlock:(void (^)OjbectType obj, NSUInteger idx, BOOL *stop))block;
idx:是每個元素的下標(biāo)index。
obj:代表遍歷出來的元素的值。
*stop:是否繼續(xù)遍歷的標(biāo)志,YES停止,NO不停止。
這是一個方法,這個方法作用來遍歷數(shù)組中的每一個元素

    NSArray *arr = @[@"jack",@"rose"];
    // 將arr數(shù)組中的每一個元素遍歷出來
    [arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){
        NSLog(@"%@", obj);
        // 如果想停止循環(huán),就將*stop設(shè)置為YES
    }]; 

NSArray和NSString 的方法。

1). 將數(shù)組中元素連接起來組成一個新的字符串
(NSString *)componentsJoinedByString:(NSString *)separator
參數(shù): 連接符

    NSArray *arr = @[@"jack", @"rose", @"lili"];
    NSString *str = [arr componentsJoinedByString:@"#"];

2). 將字符串按指定分隔符分割

    NSString *str = @"北京,昌平區(qū),傳智";
    // 使用字符串進行分割
    NSArray *arr = [str componentsSeparatedByString:","];

NSMutableArray是NSArray的子類

1). NSMutableArray仍然是一個數(shù)組,就被NSArray的特點,只能存儲OC對象,每一個元素是緊密相連的。
2). NSMutableArray相對于父類做的擴展,NSMutableArray數(shù)組的元素可以動態(tài)的新增和刪除,其他用法與NSArray一致。
所以:
NSArray數(shù)組一旦創(chuàng)建,其元素的個數(shù)就固定,無法新增與刪除
NSMutableArray數(shù)組,可以新增刪除.

3). NSMutableArray數(shù)組的創(chuàng)建

NSMutableArray *arr1 = [NSMutableArray new];
NSMutableArray *arr2 = [[NSMutableArray alloc] init]; 
NSMutableArray *arr3 = [NSMutableArray array];
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"jack", @"rose", @"lili", nil];

這樣創(chuàng)建出來的數(shù)組對象,數(shù)組的元素是0,但是有意義,可以動態(tài)的新增,刪除.
最容易犯錯:這樣寫不可以. 這時NSArray對象的簡寫。
NSMutableArray *arr1 = @[@"jack", @"rose", @"lili"];

新增與刪除

新增

a. // 將傳入的參數(shù)作為數(shù)組的元素添加進去
- (void)addObject:(ObjectType)anObject;
// 將另外一個數(shù)組中的每一個元素添加到可變數(shù)組中
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr];

b. 在可變數(shù)組中指定的數(shù)組中插入一個元素
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
[arr insertObject:@"lilei", atIndex:1]; // 可變數(shù)組的中間,插入元素

刪除

a. 刪除
// 刪除指定下標(biāo)的元素
- (void) removeObjectAtIndex:(NSUInteger)index;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr]; 
[arr removeObjectAtIndex:1];

b. 刪除特定的元素
- (void)removeObject:(ObjectType)anObject;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr]; 
[arr removeObject:@"lili"];

c. 刪除指定范圍內(nèi)的元素
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr]; 
[arr removeObject:@"lili" inRange:NSMakeRange(0, 3)];

d. 刪除最后一個元素
- (void)removeLastObject;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr]; 
[arr removeLastObject];

e. 刪除所有
- (void)removeAllObjects;

NSMutableArray *arr1 = [NSMutableArray new]; 
[arr1 addObject:@"jack"]; 
NSArray *arr = @[@"jack", @"rose", @"lili"]; 
[arr1 addObjectsFromArray:arr]; 
[arr removeAllObjects];

183. NSNumber

無論是NSArray還是NSMutableArray,里面只能存儲OC對象?;緮?shù)據(jù)類型是無法存儲的。
解決方案:先用一個OC對象,將基本數(shù)據(jù)類型包裝,再將這個對象放到NSArray中。

NSNumber

1). 作用: 包裝基本數(shù)據(jù)類型.
NSNumber *number = [NSNumber numberWithInt:10];
等價于
NSNumber *number = @10; // 簡寫方式。
// @10: 代表是1個NSNumber獨享,這個對象中包裝的是整型的10.

NSLog(@"%d", number.intValue); // 從NSNumber中取值。

注意:如果后面的數(shù)據(jù)是1個變量,這個變量就必須使用小括號括起來。
int num =10;
NSNumber *number = @(num);



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容