- 版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載。
- 根據(jù)OC學習的知識點,總結了一下,希望能幫到大家!
第一節(jié) 類與對象
| 知識點 | 注意事項 |
|---|---|
| 面向對象編程 | OOP(Object Oriented Programming) |
| 面向對象語言 | C++,JAVA,C#,OC,Swift |
| 概念 | 類,對象,封裝,繼承,多態(tài)... |
| 面向過程編程 | 分析解決問題的步驟,實現(xiàn)函數(shù),依次調(diào)用 |
| 面向對象編程 | 分解問題組成的對象,協(xié)調(diào)對象間的聯(lián)系和通信,解決問題. |
| 面向過程以過程為編程中心,面向對象以對象為編程中心. | |
| 面向對象編程設計 | 1.分析涉及到的對象.2.根據(jù)功能定義類.3.使用對象的功能完成程序 |
| 類和對象 | 1.類和對象是面向對象的核心.2.類是對象的類型.3.對象是類的實例.4.萬事萬物皆對象. |
| OC中類的定義 | 1.面向對象編程中使用對象完成程序.2.開發(fā)中:先定義類,再創(chuàng)建對象,然后適用對象.3.定義類包含兩部分:接口部分和實現(xiàn)部分.分開寫(1.接口部分:對外聲明類的特征和行為.2.實現(xiàn)部分:對內(nèi)實現(xiàn)行為.) |
| 接口部分 | 1.接口部分標志:@interface...@end2.作用:聲明類的實例變量(特征)和方法(行為).3.包含內(nèi)容:類名,父類名,實例變量,方法等. |
| 實現(xiàn)部分 | 1.實現(xiàn)部分標志:@implementation...@end.2.作用:實現(xiàn)方法,即實現(xiàn)類的行為. |
| 類和文件 | .h稱為接口文件或頭文件,.m稱為實現(xiàn)文件 |
| 創(chuàng)建對象 | 1.創(chuàng)建對象分兩步:分配內(nèi)存空間和初始化.2.分配內(nèi)存空間:根據(jù)類中聲明的實例變量為對象分配內(nèi)存,并返回首地址.3.初始化:為對象的實例變量設置初始值. |
| +(id)alloc;(+,表示這個方法屬于類,只能類執(zhí)行,id返回值類型,表示任意類型的對象) -(id)int;-表示這個方法屬于對象,只能對象執(zhí)行.id返回值類型,表示初始化完成的對象. | |
| 使用對象 | 指針存儲對象的首地址,代指對象. |
| 簡單方法 | OC中的方法分兩種:類方法和實例方法. |
| 類方法 | 只能類使用.例如:+(id)alloc,注意:類方法中不能使用實例變量. |
| 實例方法 | 只能對象使用,例如-init |
| setter和getter | 為實例變量賦值方法稱為setter,讀取實例變量的方法稱作getter(訪問器); |
第二節(jié) 繼承、初始化方法、遍歷構造器
| 知識點 | 注意事項 |
|---|---|
| 繼承 | 面向對象的語言提供了繼承語法,能夠大大簡化代碼,把公共實例變量和方法寫在父類里,子類只需要寫自己獨有的實例變量和方法.繼承即能保證類的完整,又能簡化代碼.父類可以有多個子類,子類只可以有一個父類.OC里邊繼承是單向的,不能相互繼承.繼承具有傳遞性,子類能繼承父類全部的特征和行為. |
| 繼承的特點 | OC只允許單繼承.沒有父類的類稱為根類,OC中的根類是NSobject.如果父類的方法不滿足子類的需求,子類可以重寫父類的方法.繼承具有傳遞性 |
| 繼承中方法的執(zhí)行 | 逐級向上,找到就執(zhí)行,找不到就崩潰 |
| super | 1.super是編譯器指令,并非類或者對象.2.作用:給super發(fā)消息,執(zhí)行父類中對應的方法.3.子類可以重寫父類的方法,子類既可以有自己的實現(xiàn),又有父類繼承中的實現(xiàn),如果想使用父類的實現(xiàn),需要向super發(fā)消息. |
| 初始化方法 | 1.創(chuàng)建對象分兩步:分配內(nèi)存,初始化.2.初始化方法的主要作用是:為某些實例變量賦值.3.初始化方法在整個對象生命周期里只使用一次.3.父類中聲明了公共的實例變量.作為父類也應該有自己的初始化方法,為這些公共實例變量賦初值.4.子類定義了除父類公共實例變量外的實例變量,在自身的初始化方法中,優(yōu)先向super發(fā)送init消息,初始化公共變量,初始化成功后,再初始化自身特有變量,從而完成自身全部實例變量的初始化. |
| 初始化過程 | 1.執(zhí)行父類中實現(xiàn)的初始化方法(向上遞歸到NSObject類中的初始化方法).2.從根類NSObject開始執(zhí)行初始化方法3.判斷父類中的初始化是否成功,即self是否存在.4.完成對象的初始化設置,返回對象.5.初始化子類實例變量. |
| 初始化方法特征 | 1.初始化方法是”—”號方法.2.以init開頭.3.可以帶0到多個參數(shù).4.返回值是id或者instancetype類型.5.內(nèi)部實現(xiàn):先執(zhí)行super的初始化方法,再初始化自身變量,最后return self |
| 便利構造器 | 1.便利構造器在初始化方法的基礎上前進了一小步,封裝了對象的創(chuàng)建過程.2.便利構造器以”+”方法,返回本類型的實例對象,方法名以類名開頭.3.可以有0到多個參數(shù).4.內(nèi)部實現(xiàn):封裝了alloc和初始化方法,使用起來更加方便. |
第三節(jié) 屬性
| 日期 | 任務 |
|---|---|
| setter和getter方法 | setter是賦值方法,getter是取值方法 |
| 屬性 | 屬性是Objective-C 2.0定義的語法為實例提供了setter和getter方法的默認實現(xiàn),能在一定程度上簡化程勛代碼,并且增增強實例變量的訪問安全性 |
| 屬性的聲明 | 使用@property聲明屬性,相當于在@interface里聲明了兩個方法(setter和getter) |
| 屬性的實現(xiàn) | 使用@synthesize實現(xiàn)屬性,相當于在@implementation中實現(xiàn)了兩個方法setter和getter |
| 屬性的屬性 | 為屬性提供了一些關鍵字用以控制setter,getter的實現(xiàn)細節(jié),這些關鍵字稱為屬性的屬性(attribue),一共有三大類attribue |
| 第一類:讀寫性控制(readonly,readwrite)readonly只聲明getter方法,無setter方法,readwrite告訴編譯器即聲明setter又聲明getter | |
| nonatomic | 程序開發(fā)過程中,setter和getter處處都在用,如果使用atomic,需要不斷地隊setter,getter加鎖解鎖以保證線程訪問安全,會很占用系統(tǒng)資源,降低系統(tǒng)性能.通常設置為nonatomic,某些屬性需要線程安全時,才定義為atomic |
| 屬性的屬性 | 第三類:語義設置assign,retain,copy,使用assign修飾屬性時,setter,getter內(nèi)部實現(xiàn)是直接賦值 |
| 點語法 | 點語法是Objective-C 2.0定義的語法格式,提供了一種便捷的屬性訪問方式.凡是符合系統(tǒng)默認setter,getter書寫格式的方法都可以使用點語法 |
第四節(jié) 字符串與數(shù)值對象
| 知識點 | 注意事項 |
|---|---|
| 蘋果幫助文檔的使用(文檔的基本信息) | Inherits from 繼承自; Conforms to 遵循什么協(xié)議; Framework 屬于哪個框架 ; Availability 什么時候可用的; Declared in 聲明在什么頭文件里 ; Related documents 相關文檔; Sample code 示例代碼 |
| 字符串 | c語言中,字符串是由char(ASCII)字符構成。 oc中,字符串是由unichar(unicode)字符構成 oc中,字符串分為不可變字符串和可變字符串。 不可變字符串一經(jīng)創(chuàng)建,內(nèi)容和長度不可修改 可變字符串創(chuàng)建之后,長度和內(nèi)容可修改。 |
| 不可變字符串的創(chuàng)建 | 實例方法:-initWithString: -initWithFormat: 便利構造器: +stringWithString: +stringWithFormat: |
| 字符串的常用方法 | 字符串分割 ;字符串拼接;字符串替換;字符串比較 |
| 字符串分割 | 字符串分割: -substringToIndex: -substringFromIndex: -substringWithRange: |
| 字符串拼接 | 字符串拼接: -stringByAppendingString: |
| 字符串替換 | 字符串替換:-stringByReplacingCharactersInRange:withString:-stringByReplacingOccurrencesOfString:withString: |
| 字符串比較 | -isEqualToString: |
| 可變字符串(NSMutableString) | NSMutableString繼承于NSString NSMutableString創(chuàng)建出來的字符串,是 一個動態(tài)的可變字符串,可以對其進行增 刪改查. |
| 可變字符串(NSMutableString)的創(chuàng)建 | 實例方法:- initWithFormat: -initWithString: 便利構造器: +stringWithFormat:+stringWithString: |
| NSMutableString的方法 | 字符串拼接 -appendString: 字符串插入-insertString: atIndex: 字符串刪除-deleteCharactersInRange: |
| 字符串小結 | 不可變字符串的修改操作,本質就是得到一 個新的字符串。 不可變字符串的修改方法以string開頭,有 返回值。 可變字符串的修改方法沒有返回值,修改原 字符串。 |
| 數(shù)值對象的作用 | 數(shù)值對象可以完成標量(int,float,結構體, 指針等)與對象類型的相互轉換。 |
| 數(shù)值對象(NSNumber)常用方法 | 基本類型(int,float)轉換成對象類型; 對象類型轉換成基本類型(int ,float)。 +numberWithInt: +numberWithDouble: -intValue -doubleValue |
| 數(shù)值對象(NSValue)常用方法 | NSValue是NSNumber的父類 結構體轉換為NSValue 類型對象 NSValue類型對象轉換為結構體 +valueWithRange: +valueWithPointer: - rangeValue - pointerValue |
第五節(jié) 數(shù)組、字典、集合
| 知識點 | 注意事項 |
|---|---|
| 容器簡介 | 容器類,管理一組對象類型的數(shù)據(jù).iOS中存放數(shù)據(jù)的容器類都稱為集合 |
| 數(shù)組簡介 | OC中數(shù)組是有序集合,只能存放對象類型;數(shù)組有下標(index)的概念,靠下標查找元素,下標從0開始;數(shù)組分不可變數(shù)組(NSArray)和可變數(shù)組(NSMutableArray). |
| 不可變數(shù)組 | 數(shù)組的創(chuàng)建;獲取數(shù)組元素個數(shù);根據(jù)index獲取數(shù)組中對象; |
| 不可變數(shù)組(NSArray)的創(chuàng)建 | 常用實例方法:—initWithObjects:常用便利構造器:+arrayWithObjects: |
| 獲取元素個數(shù),根據(jù)index獲取對象 | 獲取元素個數(shù): -count根據(jù)index獲取對象: -objectAtIndex: |
| 可變數(shù)組(NSMutableArray) | NSMutableArray是NSArray的子類,繼承了NSArray的所有方法可變數(shù)組可以在數(shù)組本身基礎進行增,刪,改,查等操作.常用方法:創(chuàng)建數(shù)組對象;添加元素,插入元素;刪除元素,替換元素;交換指位置的兩個元素; |
| (可變數(shù)組)NSMutableArray的創(chuàng)建 | 實例方法: - initWithCapacity:- initWithObjects: 便利構造器:+ arrayWithCapacity:+ arrayWithObjects: |
| 添加元素,插入元素 | 添加元素:- addObject:插入元素:- insertObject:atIndex: |
| 刪除元素,替換元素 | 刪除元素:- removeObjectAtIndex:- removeLastObject:- removeAllObjects:替換元素:- replaceObjectAtIndex:withObject: |
| 交換指定位置的兩個元素 | - exchangeObjectAtIndex:withObjectAtIndex: |
| 數(shù)組的遍歷 | 數(shù)組的遍歷:將數(shù)組從頭到尾全部篩選一遍;通常結合for循環(huán)使用,有多少元素就循環(huán)多少次;快速遍歷for—in |
| 字典簡介 | 對于”name:小三”來講,key就是”name”,key對應的value是”小三”;字典用于保存具有映射關系(key-value對)數(shù)據(jù)的集合;一個key-value對認為是一個條目(Entry),字典是存儲key-value對的容器 |
| 字典特點 | 與數(shù)組不同,字典靠key存取元素;key不能重復,value必須是對象;鍵值對在字典中是無序存儲的;字典分:不可變字典(NSDictionary)和可變字典(NSMutableDictionary) |
| 不可變字典(NSDictionary) | 不可變字典一旦創(chuàng)建,鍵值對就不可更改,不可添加,不可刪除.不可變字典僅能被讀取key或者value常用方法:創(chuàng)建字典對象獲取所有key值,獲取所有value值通過key值查詢value |
| 不可變字典(NSDictionary)的創(chuàng)建 | 實例方法:initWithObjectsAndKeys:便利構造器:+ dictionaryWithObjectsAndKeys: |
| 獲取所有的key和value,通過key查詢value | 獲取所有key:allKeys獲取所有value:allValue通過key查詢value:- objectForKey |
| 可變字典(NSMutableDictionary) | NSDictionary的子類可以對可變字典的鍵值對進行增,刪,改常用方法:創(chuàng)建可變字典對象添加鍵值對修改key對應的value刪除鍵值對 |
| 可變字典(NSMutableDictionary)的創(chuàng)建 | 實例方法:- initWithObjectsAndKeys:initWithCapacity:便利構造器:+ dictionaryWithObjectAndKeys: |
| 添加,修改,刪除鍵值對 | 添加,修改鍵值對:setValue:ForKey:setObject:ForKey:刪除鍵值對:-removeObjectForKey: |
| 字典的遍歷 | 遍歷allKeys遍歷allValues遍歷所有的鍵值對 |
| 集合 | 數(shù)學中有集合的的概念比如:整數(shù)集,自然數(shù)集.再比如:集合{1,2,3,4},集合{2,3,5,6}iOS中也有集合類與數(shù)學中的集合對應 |
| 集合的特點 | 與數(shù)學中的集合一樣,集合中的元素唯一存儲的元素是無序的存儲元素必須是對象類型iOS中用Set表示集合,分NSSet和NSMutableSet |
| 不可變集合(NSSet) | 常用方法:創(chuàng)建集合對象獲取元素個數(shù)獲取集合中的某個元素判斷集合中是否包含某個對象 |
| 不可變集合(NSSet)的創(chuàng)建 | 實例化方法: initWithObjects:便利構造器:+ setWithObjects: |
| 獲取不可變集合(NSSet)的元素個數(shù)及某個元素 | 獲取元素個數(shù):count獲取某個元素:- anyObject |
| 判斷集合是否包含某個元素 | - containsObject: |
| 可變集合(NSMutableSet) | 常用方法:創(chuàng)建集合對象,添加元素,刪除元素 |
| 可變集合(NSMutableSet)的創(chuàng)建 | 實例化方法:initWithObjects:便利構造器:- setWithObjects: |
| 可變集合(NSMutableSet)元素的添加,刪除 | 添加元素:addObject:刪除元素:- removeObject: |
| 計數(shù)集合特點 | NSCountedSet是NSMutableSet的子類能記錄元素的重復次數(shù)在set的基礎上添加了計數(shù)功能- countForObject: |
第六節(jié) 遍歷
| 知識點 | 注意事項 |
|---|---|
| 數(shù)組的遍歷 | NSArray *array = @[@“西游記”,@“三國演義”,@“紅樓夢”,@“水滸傳”];方法一:for循環(huán):for(int i = 0;i < array.count ;i ++){NSLog(@“%@”,array[i]);}方法二:枚舉器:NSEnumerator *enumerator = [array objectEnumerator];NSString *object = nil;while(object = [enumerator nextObject]){NSLog(@“%@”,object);}方法三:快速枚舉(for in):for(NSString *object in array){NSLog(@“%@”,object);} |
| 字典的遍歷 | NSDictionary *dictionary = @{@“name”:@“張三”,@“sex”:@“男”,@“age”:@“20”}方法一:for循環(huán):NSArray *array01 = [dictionary allKeys];for(int i = 0;i < array.count;i++){NSLog(@“%@—%@”,array[i],dictionary[array[i]]);}方法二:枚舉器:NSEnumerator *keyEnumerator = [dictionary keyEnumerator]; NSString *key = nil;while(key = [keyEnumerator nextObject]){NSLog(@“%@-%@”,key,dictionary[key]);}方法三:快速枚舉(for in):for(NSString *key in dictionary){NSLog(@“%@—%@”,key,dictionary[key]);} |
| 集合的遍歷 | NSSet *set = [NSSet setWithObjects:@“zhao”,@“qian”,@“sun”,@“l(fā)i”,nil];方法一:for 循環(huán):NSArray *array = [set allObjects];for(int i = 0; i< array.count;i++){NSLog(@“%@”,array[i]);}方法二:使用枚舉器:NSEnumerator *enumerator =[set objectEnumerator];NSString *object = nil;while(object = [enumerator nextObject]){NSLog(@“%@”,object);}方法三:快速遍歷(for in):for (NSString *object in set){NSLog(@“%@”,object); |
| for in | 1.是 oc 的快速枚舉語法,內(nèi)部封裝了枚舉器。2.數(shù)組 for in枚舉的是數(shù)組元素.3.字典 for in枚舉的是字典中的 key,因為 key 是唯一的.4.集合 for in 枚舉的是集合中的元素;5.如果用 for in 來枚舉一個可變?nèi)萜?,不能在枚舉期間對容器做任何修改,即:不能添加,刪除等。如果需要在枚舉期間做修改,請使用普通for 循環(huán),而不要用 for in |
| 不可變數(shù)組排序方法 | 排序方法:NSArray *array02 = [array01 sortedArrayUsingSelector:@selector(compareByNameAscending:)];構建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortedArrayUsingDescriptor:@[descriptor,….]] |
| 可變數(shù)組排序方法 | 排序方法:NSArray *array02 = [array01 sortUsingSelector:@selector(compareByNameAscending:)];構建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortUsingDescriptor:@[descriptor,….]] |
| SEL | 是你數(shù)組元素 元素與元素之間 的比較方法,如果數(shù)組是 person,就寫 person 與 person 的比較方法。如果數(shù)組是 string,就寫 string 與 string 的比較方法,如果數(shù)組是 teacher,就寫 teacher 與 teacher 之間的比較方法??傊?,數(shù)組元素是誰,就讓第 j 個元素與第 j+1個元素比,你讓它按年齡比,就給它比較年齡的方法,讓他按身高比,就給它比較身高的方法。 |
| 小結 | 1.官方推薦的排序方法:使用 NSSortDescriptor(描述器排序)進行排序。這種方式可以實現(xiàn)復雜排序,可以設置n個排序條件,下標0放第一排序條件,下標1放第二排序條件,以此類推。。。2.不可變數(shù)組也可以排序,只不過自身不會發(fā)生變化,會創(chuàng)建一個新的數(shù)組,存放排好序的元素,并把這個數(shù)組返回。3.可變數(shù)組可以對自身排序4.可變數(shù)組排序方法沒有返回值。方法名第一個單詞,是個動詞。 |