1. 程式人生 > >iOS開發——OC常用的資料結構一覽。

iOS開發——OC常用的資料結構一覽。

一.     在iOS開發中常用的結構體

1.    NSRange-一個範圍結構體,location是位置,length是長度;{4,5},NSMakeRange(4,5);NSStringFromRange可以把它當NSString*返回

2.    NSSize-由一個CGSize被typedef過來,CGFloat是double型別typedef過來的,也由兩個值組成:with寬度,height高度;{21,19};也可以NSMakeSize(21,19);NSStringFromSize可以由它返回一個NSString*返回

3.    NSPoint-有一個CGPoint被typedef過來的,由兩個值組成:一個x值,一個y值;{0,0}或者NSMakePoint(0,0);NSStringFromPoint可以把它返回一個NSString*

4.    NSRect-是CGRect被typedef過來,由一個CGPoint和一個CGSize組成;{0,0,100,200}或者NSMakeRect(0,0,100,200);NSStringFromRect返回一個描述它的String*

二.     基本資料型別的包裝類

1.    什麼是基本資料型別的包裝類:NSNumber它是一個類,繼承於NSValue,可以用numberWithxxx把xxx基本型別入參返回一個NSSNumber型別的指標,可以用%@列印NSNumber;也可以用xxxValue方法把當前NSNumber返回一個xxx型別的基本資料

2.    好處:可以直接轉字串不用記住那麼多列印的%格式;

3.    陣列,集合中不允許儲存基本資料型別,如果想讓陣列,集合中儲存基本資料型別,就必須要把基本資料型別包裝成NSNumber類

三.     集合類

1.    NSArray,NSDictionary,NSSet都是用來打包資料的,統稱為集合類

2.    他們會有增刪改查的基本功能,也都是類物件

3.    NSArray不可變,NSMutableArray可變;不可以在NSArray中儲存nil,因為nil代表結束;

4.    NSArray實際上儲存的是地址,也可以繼續儲存NSArray*,也就變成類一個二維表,每次列印NSArray時都是呼叫內部物件的description方法

5.    如果要在陣列中儲存基本資料型別一定要包裝為NSNumber,否則會儲存進亂碼

6.    2013年新加入了@[]方式初始化一個NSArray,也可以快速獲取NSArray中的物件array[index];

7.    #pragma mark xxx就可以在.m檔案定義一個標記,可以快速定位到標記的地方

8.    初始化一般用initWithObjects:,而獲取一般用objectAtIndex:方法

9.    count方法可以獲得陣列中元素的個數

10. 判斷NSArray中是否存在某個物件:containsObject:返回BOOL

11. 增強for迴圈:for(NSObject*obj in array){}

12. 在實際的開發當中,單個數組一般都是隻用來存放一種物件,因為遍歷陣列時如果呼叫某個物件特有的方法時會引起異常

13. 列舉器:objectEnumerator方法返回一個NSEnumerator型別的物件,也就是我們的列舉器物件。while(value = [enumerator nextObject]){}當nextObject在NSArray的最後一個物件為nil時就不再執行了

14. NSArray的排序:1使用sortedArrayUsingSelector,[arraysortedArrayUsingSelector:@selector(compare:)];     2使用block排序,[arraysortedArrayUsingComparator:^NSComparisonResult: (id obj1, obj2){return[obj1compare: obj2]}];obj1,obj2反過來就是倒敘;

15. 自定義類陣列的排序:如果你想對自己定義的物件所存的陣列進行排序,要新建一個NSSortDescriptor物件,NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @”age”ascending:YES];其中@”age”就是你想要排序的主鍵,在把NSSortDescriptor物件放入一個NSArray中,之後呼叫[array sortedArrayUsingDescriptors:陣列]為什麼是陣列呢?因為它支援多欄位排序,前面的鍵優先順序高。

16. 其實用block排序同樣可以實現對自定義類陣列的排序,比較方法要自己在block中寫

17. NSMutableArray,同樣是繼承自NSArray;同樣有增刪改查addObject:obj,insertObject:obj atIndex:index,removebject:obj會刪除陣列中所有同地址物件。還有removeObjectAtIndex:index方法,注意index如果超出範圍就會導致異常

18. 陣列中可以儲存同一個地址多次

19. removeAll是清空整個陣列

20. 在遍歷可變陣列時,千萬不要更改陣列的count,否則可能引起程式錯誤或者引發異常

21. 如果非要刪除陣列中的物件,那麼可以先宣告一個NSMutableArray,在遍歷NSArray同時刪除NSMutableArray中的物件就可以了;

22. NSDictionary,字典類,不可變;

23. 初始化字典:[dictionaryWithObjectsWithKeys:@”value”,@”key”…,nil],也可以@{@”key1”:@”value1”,@”key2”:@”value2”,…};

24. 字典中可以存放任意的資料型別,基礎資料型別同樣要求封裝為NSNumber之後儲存

25. 字典中的順序不和陣列順序一樣時自然順序

26. 字典內同樣可以存放字典型別,類似NSArray,其實字典中存放的也是物件的指標存放的地址

27. 字典一樣有count,一樣是字典中字典項的個數

28. 取值,[dictobjectForKey:@”key”],鍵對應的值是什麼型別就用什麼型別的指標去接收即可

29. 遍歷方式,首先要取出所有key,然後遍歷key組成的NSArray,在迴圈體之中用[objectForKey:@”key”]單獨獲取當前遍歷到的value即可實現

30. 如果你的字典中儲存類多種不同型別,那麼注意點和NSArray幾乎一樣

31. NSMutableDictionary,繼承自NSDictionary,可以變換的字典;

32. 有增刪改查,[setObject:objforKey:key]為key設定obj的值,[removeObjectForKey:key]方法用來刪除給定key鍵的obj物件值,[removeAllObjects]清空字典;

33. 遍歷,普通for,增強for,列舉器while遍歷同上,都是類似的。

34. NSSet最大的功能就是它不可以儲存相同的物件多次,同樣不可變

35. NSMutableSet,可變集合,繼承自NSSet。addObject:新增元素,removeObject:刪除元素removeAllObject清空集合

36. 遍歷NSMutableSet,NSEnumerator* en = [muset objectEnumerator];然後用nextObject實現遍歷

37. 集合類之間的相互轉換:NSXxx轉換NSMutableXxx,xxxWithXxx:方法就可以實現

38. NSDictionary à NSArray:allKeys,allValues分別生成倆陣列

39. 字串轉換成NSArray:componentsSeparatedByString:@”.”方法

40. 集合的手動記憶體管理:當你把物件存入到陣列中的時候,陣列會對這個物件進行一次retain操作,在陣列removeObject:的時候會對這個物件進行一次release操作,使得retainCount正常。同樣的,清空陣列會對陣列內的每個元素髮送release訊息。呼叫陣列的release方法也是會對每個元素髮送release訊息

41. ARC機制下的集合記憶體管理:當你把物件存入到陣列中時,它對物件進行一次strong指標儲存,當陣列removeObject或者removeAllObjects時會釋放這個strong指標。同樣的道理,陣列呼叫= nil的時候,也同樣會釋放所有的strong指標。這樣當元素 = nil的時候系統就自動回收元素了;

42. 所以ARC機制之中還是要擔心記憶體溢位了

四.     檔案管理器

1.    檔案操作:NSFileManager,檔案管理器,通過建立使用這個物件的方法來進行檔案操作。

2.    NSFileManager * file =[NSFileManager defaultManager];獲得檔案管理器物件,且它是單例項模式。

3.    如果要模仿這種單例項的話,要在類方法中實現一個靜態變數static NSObj* instance = nil;這個靜態變數會在main函式結束才銷燬,defaultObj方法只需要判斷如果這個靜態變數為nil就新建一個,否則直接返回這個靜態變數即可;

4.    用%p可以列印物件的指標地址,同樣NSFileManager也可以alloc,init來建立一個新的NSFileManager;

5.    獲取檔案屬性:獲取NSFileManager物件,&error入參來獲取錯誤資訊,然後通過attributesOfItemXxx:方法返回一個NSDictionary物件,裡面是返回的檔案資訊;

6.    獲取檔案中的子集:contentsOfDirectoryAtPath:方法獲取路徑下的含有的子檔案,只能夠獲得目標目錄下一級的目錄!如果想要打出給定路徑下包含的所有子檔案以及子檔案內的檔案,要用subpathsOfDirectoryAtPath:方法實現。

7.    建立一個資料夾:呼叫NSFileManager物件的createDictionaryAtPath:方法就是可以實現建立,第二個引數會逐級的建立資料夾,如果為No的話沒有上級目錄則會報錯

8.    如何移動目錄:呼叫NSFileManager物件的moveItemAtPath: toPath:方法實現

9.    刪除目錄:呼叫NSFileManager物件的removeItemAtPath:方法實現

10. 複製檔案:呼叫NSFileManeger物件的copyItemAtPath:toPath:方法實現

11. 只要是檔案,不論格式基本都可以使用NSData物件接收

五.     資料NSData

1.    NSData是你要載入不同格式檔案時要使用的資料型別,這是專門用來處理檔案資料的資料型別

2.    NSMutableData,可變資料類,繼承自NSData類,用法類似於NSData

六.     日期操作

1.    NSDate,日期資料型別,初始化直接date方法就可以

2.    日期的比較:首先NSTimeInterval其實是一個double型別,可以在當前日期呼叫addTimeInterval:方法加上這個資料型別獲得一個相差這麼長時間段的NSDate物件,對了,NSTimeInterval是以秒計數;如果要減去就加上一個負的NSTimeInterval

3.    isEqualToDate:是否相同;earlierDate:比較早的時間;laterDate:比較晚的時間;

4.    格式化日期:NSDateFormatter就是一個日期格式化物件資料型別,呼叫NSDateFormatter的setDateFormat:方法。例如:@”yyyy/MM/dd hh:mm:ss”讓後用NSString的stringFromDate方法即可

5.    這個格式化的hh代表12時制,HH程式碼24時制

6.    處理時區問題:呼叫NSDateFormatter的setTimeZone:方法計算時區導致的時差

相關推薦

iOS開發——OC常用資料結構一覽

一.     在iOS開發中常用的結構體 1.    NSRange-一個範圍結構體,location是位置,length是長度;{4,5},NSMakeRange(4,5);NSStringFromRange可以把它當NSString*返回 2.    NSSize

iOS開發——oc——founctation中常用結構體(NSRange、NSPoint\CGPoint、NSSize\CGSize、NSRect\CGRect)

          founcation中常用結構體 一、概述:    在foundation框架中,有一些關於位置和尺寸的結構體,在我們實際開發ios的時候會經常被使用到,所以這裡詳細講解下:    NSRange : 表示範圍    NSPoint\CGPoint

iOS開發常用三方庫集合OC版(三方庫、外掛、部落格等等)(17-7-28更新)

TimLiu-iOS 最新更新日期:17-7-28 歡迎大家多多貢獻和提出寶貴的意見. Swift版本點選這裡歡迎加入QQ交流群: 594119878 介紹 這是一個用於iOS開發的各種開源庫、開源資料、開源技術等等的索引庫. 使用方法 根據目錄關鍵字搜尋,記得包含@,以保證搜尋目錄關鍵字的唯一性。 問題

開發常用資料結構設計剖析丨雲開發101

雲開發常用資料結構設計 在使用雲開發進行產品開發的時候,我們常常需要思考,我們的應用的資料結構應該如何設計,今天我們來看一些在進行應用開發時常見的一些場景的資料結構,來幫助你更好的理解雲開發,以及不同場景下雲開發的應用。 場景一:使用者個人資訊表 功能:判斷使用者是否註冊/留存使用者資訊以備查詢 在絕大多數場

iOS開發常用的宏

tar lin iter standard ffi ant height same alt OC對象判斷是否為空? 字符串是否為空 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] ||

Java常用資料結構之List

JDK 11正式釋出了,Oracle終於出了一個長期維護版本,應該將是繼JDK 8之後的一個常規使用版本。 前言 作為Java系開發者對Java集合類的使用應該是較為頻繁的,也是面試中經常會被問的問題。一直想整理一下Java集合和Android中的優化集合類,借這次機會

【python】入門指南:常用資料結構

Python內建了三種高階資料結構:list,tuple,dict list:陣列,相同型別的元素組成的陣列 tuple:元組,相同型別的元素組成的陣列,但是這裡有限定條件(長度是固定的,並且值也是固定的,不能被改變) dict:字典,k-v結構的   list陣列 1,初始化和遍歷li

iOS開發常用的UIView控制元件——UILabel、UITextField、UIButton

前面幾篇文章已經對iOS開發中比較基本的幾個檔案進行了瞭解,今天主要學習StoryBoard檔案和幾個常見的UI控制元件。 Storyboard功能是在iOS5開始新增的功能,一種新技術的出現大多是為了彌補舊技術的不足,而在storyboard之前iOS 開發設計介面是使用nib檔案(xib

Python3常用資料結構及方法介紹(三)——字串

三.字串 特點:不可更改 1.基本操作(同其他序列) ①索引 >>> 'python'[2] 't' ②分片 >>> 'beauty'[0:2] 'be' >>> 'beauty'[::2] 'bat' ③相加/相乘

Python3常用資料結構及方法介紹(二)——元組

二.元組 tuple 1特點: ①元組不可更改 ②圓括號 ③可重新賦值 >>> tuple0=(1,2,3) >>> tuple0=(2,3,4,1) >>> tuple0 (2, 3, 4, 1) 2常用元組操作(與列表類

Python3常用資料結構及方法介紹(一)——列表

一.列表 list 1特點: ①列表可更改 ②方括號 [1, 2, 3] 2常用列表操作: ①索引: >>> list1 = [1,2,3,4,5,6,7,8,9,10] >>> list1[4] 5 ②分片: >>>

幾張動態圖捋清Java常用資料結構及其設計原理

最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向連結串列不再是迴環的. HashMap中的單鏈表是尾插,

Java常用資料結構之Set之TreeSet

前言 上篇文章我們分析了HashSet,它是基於HashMap實現的,那TreeSet會是怎麼實現的呢?沒錯!和大家想的一樣,它是基於TreeMap實現的。所以,TreeSet的原始碼也很簡單,主要還是理解TreeMap。 TreeSet的繼承關係 按照慣例,先來看TreeSet類的繼承關係: pub

《OpenCV3程式設計入門》——4.2 OpenCV中常用資料結構和函式(Point、Scalar、Size、Rect、cvtColor)

目錄 1、點的表示:Point類 2、顏色的表示:Scalar類 3、尺寸的表示:Size類 4、矩形的表示:Rect類 5、顏色空間轉換:cvtColor()函式 1、點的表示:Point類 Point類資料結構表示了二維座標系下的點,即由影象座標x和y指定的2D點

SPL的常用資料結構(2)

SPL的常用資料結構--概念 ·什麼是資料結構  -資料結構是計算機儲存、組織資料的方式。資料結構是相互之間存在一種或多種特定關係的資料元素的結合。  -解決的是軟體開發過程中的資料如何儲存和表示的問題。·新浪微博裡面某個使用者的資料怎麼存? 舉例:   ====》

[OpenCV3程式設計入門讀書筆記]常用資料結構和函式(3)

點的表示:Point類 //第一種表示方式 Point point; point.x = 10; point.y = 8; //第二種表示方式 Point point = Point(10,8); 顏色的表示:Scalar類 特別注意OopenCV裡面不是RGB,是BGR,所以下面的a

常用資料結構思維:遞推及其寫法

作為小白,我看到遞迴程式只是能看懂,但是自己寫不出來,我知道要有一個臨界條件(這個並不難找),但我不知道怎麼演進,這讓我十分頭疼,因此找到了一篇個人認為寫的不錯的文章如下,根據我對遞迴的理解和疑問對原文做了一些標註,歡迎各位大佬,寫下自己對遞迴的理解,本小白感激不盡。

常用資料結構思維:分治、動態規劃、貪心、回溯、分支限界

分治:把一個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併 http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html#30

常用資料結構總結(基於C++)

棧(stack) 簡介 棧是一種只能在一端進行插入或者刪除操作的線性表。其中允許進行插入或者刪除操作的一端稱為棧頂。棧的插入和刪除一般叫入棧和出棧。棧的順序儲存結構叫做順序棧,棧的鏈式儲存結構叫做鏈棧。 C++中棧的標頭檔案為<stack> 宣告 stack<資

常用資料結構與演算法時間複雜度求解

1.0 資料結構的相關概念 2.0 一些基本演算法的時間複雜度 O(1): int x=1; O(n): for(int i = 0; i < n; i++){ printf("%d",i); } O(lo