1. 程式人生 > >iOS開發核心語言Objective C —— 面向對象思維、setter和getter方法及點語法

iOS開發核心語言Objective C —— 面向對象思維、setter和getter方法及點語法

才幹 各路 alt .net 行為 變量的作用域 fadein 格式 讀取

本分享是面向有意向從事iOS開發的夥伴們。或者已經從事了iOS的開發人員。假設您對iOS開發有極高的興趣,能夠與我一起探討iOS開發。一起學習,共同進步。假設您是零基礎,建議您先翻閱我之前分享的iOS開發分分鐘搞定C語言系列。然後在開始Objective C語言的學習,假設您遇到問題也能夠與我探討,另外將無償分享自己整理的大概400G iOS學習視頻及學習資料。都是幹貨哦。能夠新浪微博私信?關註極客James。期待與您的共同學習和探討。!

由於時間有限,每天在工作之余整理的學習分享。難免有不足之處,也希望各路大神指正!

made by :極客James
技術分享

一、OC中面向對象特性 封裝


1.封裝
封裝性就是隱藏實現細節,,僅對外公開接口。


2.為什麽要進行封裝?
類是數據與功能的封裝,數據就是成員變量,功能就類方法或對象方法
對數據的封裝。也就是對成員變量的封裝
不封裝的缺點:當一個類把自己的成員變量暴露給外部的時候,那麽該類就失去對該成員變量的管理權。別人能夠隨意的改動你成員變量。
封裝就是將數據隱藏起來,僅僅能用此類的方法才幹夠讀取或者設置數據,不可被外部隨意改動是面向對象設計本質。減少了數據被誤用的可能性! 提高代碼的靈活性。

封裝的原則:
將不須要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共的方法對其訪問。

二、OC中面向對象特性 繼承
1.繼承


同一基類中的共同特性,子類也有其特性,簡言之子類繼承父類的。就叫做繼承。
2.繼承關系
B類繼承A類。那麽B類將擁有A類的全部屬性和方法,此時我們說A類是B類的父類,B類是A類的子類。

C類繼承B類,那麽C類將擁有B類中的全部屬性和方法。包含B類從A類中繼承過來的屬性和方法。此時我們說B類是C類的父類,C類是B類的子類。

3.OC中實現繼承的格式

@interface 子類名稱 : 父類名稱

@end

三、OC中面向對象特性 多態
1.多態
同一事物的多種表現形式。

在程序中為:父類指針指向子類對象。

2.多態的條件
(1)有繼承關系
(2)子類重寫父類方法
(3)父類指針指向子類對象
表現:當父類指針指向不同的對象的時候,通過父類指針調用被重寫的方法的時候。會執行該指針所指向的那個對象的方法。

3.多態的長處
多態的主要長處就是簡化了編程接口。它同意在類和類之間重用一些習慣性的命名,而不用為每個新加的函數命名一個新名字。

這樣,編程接口就是一些抽象的行為的集合,從而和實現接口的類的區分開來。

多態也使得代碼能夠分散在不同的對象中而不用試圖在一個函數中考慮到全部可能的對象。

這樣使得您的代碼擴展性和復用性更好一些。當一個新的情景出現時,您無須對現有的代碼進行 改動,而僅僅須要添加一個新的類和新的同名方法。

4.多態的註意點
1)假設存在多態,父類是能夠訪問子類特有的方法。
2)假設父類指針指向子類對象, 假設須要調用子類特有的方法, 必須先強制類型轉換為子類才幹調用。

四、setter方法
1.作用
用來設置成員變量。能夠在方法裏面過濾掉一些不合理的值

2.命名規範
(1)必須是對象方法。


(2)返回值類型為void。
(3)方法名必須以set開頭,而且後面跟上成員變量名去掉”_” 首字母必須大寫。


(4)必須提供一個參數,參數類型必須與所相應的成員變量的類型一致
形參名稱和成員變量去掉下劃線同樣。

實例:

- (void)setAge:(int)age;

3、setter方法的長處
不讓數據暴露在外,保證了數據的安全性
對設置的數據進行過濾

五、getter方法
1.作用
為調用者返回對象內部的成員變量的值。

2.命名規範
(1)必須是對象方法
(2)必須有返回值,返回值的類型和成員變量的類型一致
(3)方法名必須是成員變量去掉下劃線
(4)一定是沒有參數的

實例:
假設成員變量為int _age 那麽與之相應geter方法為

- (int) age;

getter的實現方法:

  - (int)age{
  return _age;
}

3.getter方法的長處
(1)能夠讓我們在使用getter方法獲取數據之前,對數據進行加工;
(2)比方雙十一活動。我們希望對全線商品的價格在原來的價格基礎上打五折,那麽我們僅僅要去改成品類的價格的getter方法就能夠了。讓他返回的值為價格 * 0.5。

六、setter和getter方法的註意
(1)在實際的開發中,不一定set和get方法都會提供,假設內部的成員變量,比方學生的學號或計算出來的數據。

這樣的數據僅僅同意外界讀取。可是不同意改動的情況,則通常僅僅提供get方法而不提供set方法 。

(2)成員變量名的命名以下劃線開頭,get方法名不須要帶下劃線

(3)成員變量名使用下劃線開頭有兩個長處
(4)與get方法的方法名區分開來
(5)能夠和一些其它的局部變量區分開來,下劃線開頭的變量,通常都是類的成員變量。當我看到以下劃線開頭變量。那麽他一定是成員變量
(6)一個屬性能夠僅僅有getter方法, 沒有setter方法, 這樣的屬性我們稱之為僅僅讀屬性
(7)一個屬性也能夠僅僅有setter方法, 沒有getter方法, 這樣的屬性我們稱之為僅僅寫屬性
(8)假設既有setter方法又有getter方法, 那麽這樣的屬性我們稱之為可讀可寫的屬性,而且, 一個屬性也能夠沒有getter和setter, 這樣的屬性我們稱之為私有屬性。

七、點語法
1.點語法本質
點語法的本質是是方法調用,是編譯器特性。當有點語法時。編譯器就會生成相應的方法,在iOS開發中很重要也很經常使用。

2.點語法特質
當點語法使用在 “=“賦值符號左側的時候。點語法會被展開為setter方法的調用,其它情況(等號右側、直接使用)為點語法展開為getter方法的調用。

3.點語法註意
(1)點語法的本質是方法的調用,而不是訪問成員變量,當使用點語法時,編譯器會自己主動展開成相 應的方法調用。

(2)切記點語法的本質是轉換成相應的對setter和getter方法調用,假設沒有set和get方法,則不能使用點語法。

(3)不要在getter 與 setter方法中使用本屬性的點語法。

(4)點語法一般用於給成員變量賦值, 假設不是給成員變量賦值普通情況下不建議使用, 可是也能夠使用。

- (void) setAge:(int)age {
    // 以下的代碼會引發死循環
    self.age = age;
        //編譯器展開後 [self setAge:age]
}
- (int) age {
    // 以下的代碼會引發死循環
    return self.age;
          // 編譯器展開後 [self   age]
}

八、self關鍵字、super關鍵字
1.self關鍵字
(1)首先要理解什麽是self。什麽是成員變量。什麽是對象方法,什麽是類方法這幾者的概念。
(2)成員變量:成員變量是一個實例對象的詳細狀態特征。而且這些狀態特征是能夠改變的,如張三的年齡,身高,體重等
(3)對象方法:一個實例對象的行為。比方張三具有吃的行為,張三做出這樣行為的時候,有可能會影響,自身的某些狀態特征。比方張三吃可能會添加張三體重和身高。
(4)類方法:類方法是某個類的行為,能夠直接通過類名調用。假設在類方法中須要使用某些數據,必須通過參數傳入;它不能訪問成員變量。

2.類方法中的self
(1)在整個程序執行過程中,一個類有且僅有一個類對象。
(2)通過類名調用方法就是給這個類對象發送消息。
(3)類方法的self就是這個類對象
(4)在類方法中能夠通過self來調用其它的類方法
(5)不能在類方法中去調用對象方法或成員變量,由於對象方法與成員變量都是屬於詳細的實例對象的。


(6)類方法中能夠直接調用類方法
(7)類方法中不能夠直接調用對象方法
(8)類方法中不能訪問成員變量

3.對象方法中的self
(1)在整個程序執行過程中。對象能夠有0個或多個
(2)通過對象調用方法就是給這個對象發送消息
(3)對象方法中self就是調用這種方法的當前對象。


(4)在對象方法中。能夠通過self來調用本對象上的其它方法
(5)在對象方法中。能夠通過self來訪問成員變量

4.self總結
(1)誰調用self所在的方法。那麽self就是誰
(2)self在類方法中。就是這個類的類對象。全局僅僅有一個,可通過self調用本類中的其它類方法,可是不能通過self來調用對象方法或訪問成員變量
(3)self在對象方法中,就是調用這種方法的那個對象, 能夠通過self調用本類中其它的對象方法。訪問成員變量,但不能通過self調用本類的類方法。
(4)通過self調用方法的格式:[self 方法名];
(5)通過self訪問成員變量格式:self->成員變量名
(6)我們僅僅用關註self在哪一個方法中 , 假設在類方法那麽就代表當前類, 假設在對象方法那麽就代表”當前調用該方法的對象”.

5.self使用註意
(1)同一時候有對象方法和類方法存在的時候,self不會調錯
(2)self僅僅能在方法中使用;不要使用self來調用函數,也不能夠在函數內部使用self;
(3)使用self調用本方法,導致死循環調用。

九、實例變量修飾符
1.實例變量的作用域
1)@public (公開的)在有對象的前提下不論什麽地方都能夠直接訪問。
2)@protected (受保護的)僅僅能在當前類和子類的對象方法中訪問
3)@private (私有的)僅僅能在當前類的對象方法中才幹直接訪問
4)@package (框架級別的)作用域介於私有和公開之間,[email protected],[email protected]

2.變量修飾符在子類中的訪問
1)@private私有成員是能被繼承,也不能被外部方法訪問。


2)@public 公有成員能被繼承,也能被外部方法訪問。
3)@protected 保護成員能夠被繼承,不能夠被外部方法訪問。

3.實例變量作用域使用註意事項
(1)[email protected] @end之間聲明的成員變量假設不做特別的說明,那麽其默認是protected 的。
(2)一個類繼承了還有一個類,那麽就擁有了父類的全部成員變量和方法,註意全部的成員變量它都擁有,[email protected]

技術分享

iOS開發核心語言Objective C —— 面向對象思維、setter和getter方法及點語法