NS類(NSArray、NSString梨睁、NSDictionary等)

一.數(shù)組 NSArray與NSMutableArray

  1. 數(shù)組只能存放OC對象,基本數(shù)據(jù)類型需要加入時(shí)需要封裝為NSNumber類型 數(shù)組分為不可變數(shù)組NSArray 與可變數(shù)組NSMutableArray 創(chuàng)建不可變數(shù)組時(shí)使用copy修飾

  2. 不可變數(shù)組在初始化時(shí)可先指定內(nèi)存空間

  3. 不可變數(shù)組NSArray在創(chuàng)建后變不可增加娜饵、刪除元素

  4. 可變數(shù)組的增刪改插
    ①. 增//添加一個(gè)元素 [array addObject:ppp]; //添加多個(gè)元素[array addObjectsFromArray:@[aaa,bb,ccc]]
    ②. 插[array insertObject:@"Two" atIndex:1];
    ③. 改//替換元素 [array replaceObjectAtIndex:0 withObject:@"1"]; //交換元素 [array exchangeObjectAtIndex:1 withObjectAtIndex:2];
    ④. 刪//刪除所有元素 [array removeAllObject] //刪除指定元素 [array removeObject:ppp] //刪除指定下標(biāo)元素[array removeObjectAtIndex:1] //刪除最后一個(gè)元素[array removeLastObject]

  5. 獲取數(shù)組某元素在數(shù)組中的位置
    NSUInteger index = [array1 indexOfObject:@"abcde"];

  6. 獲取第一個(gè)/最后一個(gè)元素
    NSString * str2 =[array1 firstObject]; NSString * str3 = [array1 lastObject];

  7. 判斷數(shù)組是否包含某個(gè)元素
    BOOL tag = [array containsObject:@"Five"];

  8. 將數(shù)組的元素進(jìn)行拼接
    // 只對字符串對象操作 NSString * str4 = [array componentsJoinedByString:@"poi"];poi為分割字符

  9. 將string字符轉(zhuǎn)換為array數(shù)組
    NSString *tempString = [mutableArray componentsJoinedByString:@","];--分隔符

  10. 數(shù)組的遍歷

for (NSInteger i = 0; i < [arr count]; i++) {  
        NSLog(@"arr[%ld] = %@",i,arr[i]);  
    }
//快速枚舉法(快速遍歷)
for (id arr2Q in arr2) {  
        NSLog(@"arr2Q = %@",arr2Q);  
    }  
[arrayM enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"%zd--%@",idx,obj);
    }];

二.集合 NSSet坡贺、NSMutableSet、NSCountedSet、NSOrderedSet拴念、NSMutableOrderedSet

原文鏈接 原文有更詳細(xì)的解釋

  • NSSet:集合钧萍。是NSObject的子類,跟NSArray不一樣在于政鼠,NSArray的元素是有序的风瘦,可以通過索引訪問,而NSSet的元素是無序的公般,不能通過索引訪問万搔;NSArray的元素可以是重復(fù)的,而NSSet的元素不能重復(fù)官帘,同一個(gè)元素只能有一個(gè)瞬雹。

  • NSMutableSet:可變集合。是NSSet的子類刽虹,跟NSSet不一樣的地方在于NSMutableSet的元素是可以修改的酗捌,可以增加刪除替換等操作。

  • NSCountedSet:可計(jì)數(shù)集合涌哲。是NSMutableSet的子類胖缤,跟NSMutableSet不一樣的地方在于,它的元素有個(gè)計(jì)數(shù)功能阀圾,添加同一個(gè)元素兩次后該元素的計(jì)數(shù)為2哪廓,但是元素只能有一個(gè)不能重復(fù),刪除該元素的時(shí)候初烘,當(dāng)該元素的計(jì)數(shù)為0時(shí)刪除它涡真。

  • NSOrderedSet:有序集合。是NSObject的子類肾筐,跟NSSet不一樣的地方在于哆料,它的元素是有序的,可以通過索引訪問局齿,當(dāng)然元素也不可重復(fù)出現(xiàn)剧劝。

  • NSMutableOrderedSet:有序可變集合。是NSOrderedSet的子類抓歼,跟NSOrderedSet不一樣的地方在于讥此,它的元素可以增刪替換等操作。

  1. 無序集合的元素是無序且不重復(fù)的谣妻,在內(nèi)存中存儲的方式是不連續(xù)的萄喳。數(shù)組是有序的,在內(nèi)存中的存儲位置是連續(xù)的

  2. 無序集合與數(shù)組的優(yōu)劣:無序集合在搜索一個(gè)一個(gè)的元素時(shí)效率比數(shù)組高蹋半,因?yàn)樗褂昧薶ash算法可以直接找到元素存儲的位置他巨,而數(shù)組則需要遍歷整個(gè)數(shù)組效率較低;

三.字典 NSDictionary與NSMutableDictionary

  1. 字典是無序的,鍵值對不分前后
  2. 獲取字典中所有的鍵NSArray *array = dic1.allKeys; // [dic1 allKeys]
  3. 獲取字典中所有的值NSArray *array2 = [dic1 allValues]; // dic1.allValues
  4. 可變字典使用語法糖創(chuàng)建NSMutableDictionary *dic3 = [@{@"name" : @"luigi", @"sex" : @"man", @"old" : @"18"} mutableCopy];
  5. 字典的遍歷 可用于根據(jù)value獲取對應(yīng)的key
[dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"%@:%@",key,obj);
        //設(shè)置*stop = YES染突;可停止遍歷
    }];

四. 字符串 NSString與NSMutableString

  1. 字符串的比較BOOL result = [str isEqualToString:str2];
  2. 不考慮大小寫比較字符串int result = [str caseInsensitiveCompare:str2];
  3. 比較兩個(gè)字符串的大小int result = [str compare:str2];
  4. 獲取長度NSInteger len = str.length;
  5. 大小寫轉(zhuǎn)換//轉(zhuǎn)成大寫strUp = [str uppercaseString]; //轉(zhuǎn)成小寫strLo = [str lowercaseString]; //首字母大寫其他小寫str2 = [str capitalizedString];
  6. 字符串的截取
    ①. 從開始位置截取到5(不包括5)NSString *newStr = [str substringToIndex:5];
    ②. 從5開始截取到尾部(包括5)NSString *newStr = [str substringFromIndex:5];
    ③. 截取指定范圍的字符串NSRange range = {1,5}; stringnews = [string21 substringWithRange:range];
  7. 字符串的追加NSString *newStr = [str stringByAppendingString:@"adhs"];NSString *newStr = [str stringByAppendingFormat:@"%@",@"asda"];
  8. 字符串的查找NSRange rang = [string23 rangeOfString:@"ios"];//返回一個(gè)范圍 rang.location == NSNotFound為沒有查詢到否則即查詢成功
  9. 取出字符串中指定的charunichar c = [str characterAtIndex:5];
  10. 可變字符串的插入與追加//插入[string1 insertString:@"可變" atIndex:0];//追加[string1 appendString:@"可變"];
  11. 刪除或替換字符串內(nèi)容//先查找出需要替換的字符串范圍NSRanger ranges = [str rangeOfString:@"ios"]; //刪除[str deleteCharactersInRange:range];//替換[str replaceCharactersInRange:ranges withString:@"ee"];

五.NSData

基本概念:NSData是用來包裝數(shù)據(jù)的捻爷。NSData存儲的是二進(jìn)制數(shù)據(jù),屏蔽了數(shù)據(jù)之間的差異份企,文本也榄、音頻、圖像等數(shù)據(jù)都可用NSData來存儲

NSData全部API解釋

  1. NSData與NSString的轉(zhuǎn)換//str轉(zhuǎn)data NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; //data轉(zhuǎn)str NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

  2. NSData與UIImage //data轉(zhuǎn)image UIImage *image = [UIImage imageWithData:imageData]; //將指定路徑的圖片轉(zhuǎn)為data NSData *imageData = [NSData dataWithContentsOfFile:filePath];

  3. NSData與NSArray司志、NSDictionary

//歸檔與解檔
//歸檔(XXX代表任意對象遵循<NSCoding>協(xié)議) XXX轉(zhuǎn)為NSData
id XXX;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:XXX];
[data writeToFile:[Utils applicationDocumentsDirectory:kCollectFilePath] atomically:YES];
//解檔
id XXX= [NSKeyedUnarchiver unarchiveObjectWithData:[NSData dataWithContentsOfFile:[Utils applicationDocumentsDirectory:kCollectFilePath]]];

其余NSData相關(guān)將在數(shù)據(jù)持久化篇復(fù)習(xí)

六.NSTimer計(jì)時(shí)器

文章轉(zhuǎn)載NSTimer
[NSTimer scheduledTimerWithTimeInterval:1 target:testObject2 selector:@selector(timerAction:) userInfo:nil repeats:YES];

  1. 什么是NSTimer
      官方給出解釋是“A timer provides a way to perform a delayed action or a periodic action. The timer waits until a certain time interval has elapsed and then fires, sending a specified message to a specified object. ” 翻譯過來就是timer就是一個(gè)能在從現(xiàn)在開始的后面的某一個(gè)時(shí)刻或者周期性的執(zhí)行我們指定的方法的對象甜紫。
  2. timer會對它的target進(jìn)行retain,我們需要謹(jǐn)慎對待這個(gè)target的生命周期問題骂远,尤其是重復(fù)性的timer囚霸。(NSTimer初始化后,self的retainCount加1.那么激才,我們需要在釋放這個(gè)類之前拓型,執(zhí)行[timer invalidate];否則,不會執(zhí)行該類的dealloc方法瘸恼。在viewDidDisappear中調(diào)用[timer invalidate])
  3. timer并不總是準(zhǔn)時(shí)觸發(fā)吨述,timer不是一種實(shí)時(shí)的機(jī)制,會存在延遲钞脂,而且延遲的程度跟當(dāng)前線程的執(zhí)行情況有關(guān)。
      假設(shè)你添加了一個(gè)timer指定2秒后觸發(fā)某一個(gè)事件捕儒,但是恰好那個(gè)時(shí)候當(dāng)前線程在執(zhí)行一個(gè)連續(xù)運(yùn)算(例如大數(shù)據(jù)塊的處理等)冰啃,這個(gè)時(shí)候timer就會延遲到該連續(xù)運(yùn)算執(zhí)行完以后才會執(zhí)行。重復(fù)性的timer遇到這種情況刘莹,如果延遲超過了一個(gè)周期阎毅,則會和后面的觸發(fā)進(jìn)行合并,即在一個(gè)周期內(nèi)只會觸發(fā)一次点弯。但是不管該timer的觸發(fā)時(shí)間延遲的有多離譜扇调,他后面的timer的觸發(fā)時(shí)間總是倍數(shù)于第一次添加timer的間隙。
  4. 必須得把timer添加到runloop中抢肛,它才會生效狼钮。
    NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:1] interval:1 target:testObject3 selector:@selector(timerAction:) userInfo:nil repeats:NO]; [testObject3 release]; //添加到runloop [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

七.NSEnumerator 迭代器

文章轉(zhuǎn)載

  1. 迭代器
  NSArray *arr = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
        
    // 創(chuàng)建數(shù)組 正序 迭代器
    NSEnumerator *arrEnumer1 = [arr objectEnumerator];
        
    // 創(chuàng)建數(shù)組 反序 迭代器
    NSEnumerator *arrEnumer2 = [arr reverseObjectEnumerator];
        
    // 創(chuàng)建字典 key 迭代器
    NSEnumerator *dicKeyEnumer = [dic keyEnumerator];
        
    // 創(chuàng)建字典 對象 迭代器
    NSEnumerator *dicObjEnumer = [dic objectEnumerator];
        
    // 獲取迭代器中下一個(gè)對象
    id obj = [arrEnumer1 nextObject];
        
    // 獲取迭代器中所有對象
    NSArray *array = [arrEnumer2 allObjects];
  1. 數(shù)組用迭代器遍歷
    NSArray *array = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];
        
    // 獲取數(shù)組的正序迭代器
    NSEnumerator *enu1 = [array objectEnumerator];
        
    // 獲取數(shù)組的反序迭代器
    NSEnumerator *enu2 = [array reverseObjectEnumerator];
        
    // 遍歷數(shù)組
    id obj = nil;
        
    // 正序,獲取下一個(gè)需要遍歷的元素
    while (obj = [enu1 nextObject]) {
        NSLog(@"%@", obj);
    }
        
    // 反序捡絮,獲取下一個(gè)需要遍歷的元素
    while (obj = [enu2 nextObject]) {
        NSLog(@"%@", obj);
    }
  1. 集合用迭代器遍歷
    NSSet *set = [NSSet setWithObjects:@5, @23, @3, @8, @21, @33, @18, nil];
        
    NSEnumerator *enu = [set objectEnumerator];
        
    id obj = nil;
        
    while (obj = [enu nextObject]) {
        NSLog(@"%@", obj);
    }
  1. 字典用迭代器遍歷
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
        
    // key 迭代器
    NSEnumerator *keyEnumer = [dic keyEnumerator];
        
    id key = nil;
    while (key = [keyEnumer nextObject]) {
        NSLog(@"%@ = %@", key, [dic objectForKey:key]);
    }
        
    // 對象迭代器
    NSEnumerator *objEnumer = [dic objectEnumerator];
        
    id obj = nil;
    while (obj = [objEnumer nextObject]) {
        NSLog(@"%@", obj);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熬芜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子福稳,更是在濱河造成了極大的恐慌涎拉,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鼓拧,居然都是意外死亡半火,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門季俩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钮糖,“玉大人,你說我怎么就攤上這事种玛∶旰祝” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵赂韵,是天一觀的道長娱节。 經(jīng)常有香客問我,道長祭示,這世上最難降的妖魔是什么肄满? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮质涛,結(jié)果婚禮上稠歉,老公的妹妹穿的比我還像新娘。我一直安慰自己汇陆,他們只是感情好怒炸,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毡代,像睡著了一般阅羹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上教寂,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天捏鱼,我揣著相機(jī)與錄音,去河邊找鬼酪耕。 笑死导梆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迂烁。 我是一名探鬼主播看尼,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婚被!你這毒婦竟也來了狡忙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤址芯,失蹤者是張志新(化名)和其女友劉穎灾茁,沒想到半個(gè)月后窜觉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡北专,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年禀挫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓颓。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡语婴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驶睦,到底是詐尸還是另有隱情砰左,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布场航,位于F島的核電站缠导,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溉痢。R本人自食惡果不足惜僻造,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孩饼。 院中可真熱鬧髓削,春花似錦、人聲如沸镀娶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯码。三九已至旧巾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忍些,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工坎怪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罢坝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓搅窿,卻偏偏與公主長得像嘁酿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子男应,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容