類方法的概述:
+表示類方法,就是類呼叫方法,不依賴任何物件的方法
-表示物件方法,只能物件呼叫,依賴於任何物件的方法
類的使用注意事項:
類方法可以和例項方法同名,例項方法有例項物件訪問呼叫,類方法要通過類裡訪問呼叫。
類方法也可以是從父類繼承而來,子類可以重寫類方法,
類方法和例項方法一樣在inte***ce 裡宣告,在implementation裡實現
類方法只能被類呼叫執行,向例項物件傳送類方法是不能被觸發執行的
在類方法裡使用了self,self執行的類物件是class object 而不是例項物件instance object
類方法中易犯的錯誤
在類方法中使用了類成員變數
匿名物件
[person new]
呼叫方法:[persn new] run];
優點:可以簡化**,方便方法呼叫
缺點:匿名物件例項化以後,只能正確的使用成員變數
person *p = [[person alloc] init];
person *p1 =[person new];
alloc 和init分別把分配記憶體和初始化的工作分開,先分配記憶體,然後呼叫類的建構函式
封裝:
本質是:把資料隱藏起來,只能用此類的方法函式才可以訪問或者設定資料,降低資料的無用的可能型
原理:例項變數預設只能被當前類的物件方法訪問
步驟:定義設定例項變數(setter)方法和訪問例項變數(getter)方法
setter設定器
set方法的作用:提供外接乙個設定成員變數值的方法
命名規範:
方法名以set開頭
是物件方法,只能由物件呼叫
返回值一定是void
一定要接收乙個引數,而且引數型別需要和成員變數的型別一致
形參名不能和成員變數名一樣
set方法的好處:不讓資料暴露在外,保證資料的安全性
對設定的資料進行過濾
-(void)setage:(int)age;宣告
-(void) setage:(int)age
getter方法(訪問器)
get 的作用:為呼叫者返回物件內部的成員變數
命名規範:一定有返回值,返回值的型別和成員變數的型別一致
方法名和成員變數名一樣
不需要接收任何引數
-(int) age;宣告
-(int)age
物件和物件的關係:
組合模式:
把具有相同基類型別的物件組合到樹形結構中,表示部分-整體的層次結構
依賴關係:
a物件作為b物件的區域性變數或是方法形參,
[p feeddog:dog];
關聯關係:當乙個物件擁有另乙個物件的時候
當b物件為a物件的成員變數的時候,b物件與a物件之間存在一種關聯關係
其耦合度高於依賴關係
過載:oc中 沒有嚴格的方法的過載
oc中的過載是引數個數不同,但返回型別後面的名字相同。或者是引數的個數相同,但是其標籤不相同
-(void)test:(int) intvalue;
-(void)test:(int) intvalue: andage:(int) age;
static關鍵字使用
static修飾區域性變數:延長區域性變數的生命週期
全域性變數:當前變數只能在當前檔案中使用
修飾函式:函式只能在當前問檔案中使用
注意:static不能修飾例項變數
static不能修飾物件方法
self和super關鍵字的介紹
super 傳送訊息可以將方法實現分發其父類。可以重寫乙個已有的方法來修飾或將他新增到現有方法中,仍然可以將原始的方法納入到修改後的方法中
self在物件方法中使用其指代的是當前類方法的物件
self 在類方法中使用其指代的是當前類
self修飾變數在物件方法中可以利用self ->屬性名稱的方式訪問成員變數
當存在區域性變數名和成員變數名同名的時候
self 誰呼叫當前方法,self就代表誰
self在物件方法中,self就代表當前物件
self在類方法中,self就代表類
[self 方法名稱];呼叫其他方法(類方法\物件方法)
繼承::
注意點:基類的私有能被繼承,但是不能被使用
oc中繼承是但繼承的:也就是說乙個類只能乙個父類,不能繼承多個父類
方法的重寫:
從父類繼承的方法,可能這個方法並不適合子類,可以再在類中重寫父類的 方法;
可以使用[super 方法名],呼叫父類的方法
繼承的注意事項:
子類不能定義和父類同名的變數,但是可以繼承父類的變數
oc類支援單一繼承,不支援多繼承
oc中類支援多層繼承
繼承體系 中方法呼叫的順序
1、在自己類中找
2、如果沒有,就去父類中找
3、如果父類中沒有,就去父類的父類中找
4、如果父類的父類沒有,就還往上找,知道基類(nsobject)
5、如果nsobject也沒有就報錯
例項變數修飾符:
@public (公開的)在有物件的前提下,任何地方都可直接訪問。
@protected(受保護的)只能在當前類和子類的物件方法中訪問
@private(私有的)只能在當前類中使用
@package(框架級別的)作用域介於私有和公開之間,只要處於同乙個框架中就可以直接通過變數名訪問
@inte***ce person :nsobject
在@inte***ce @end之間宣告的成員變數如果不做特別的說明,預設是protected的
oc中私有變數
在類.m@implementation中也可以宣告成員變數,但是不在標頭檔案中,所以在其他類中匯入標頭檔案的時候,並不能使用這個成員變數
在類的宣告中用@private 關鍵字修飾,那麼該變數只能在本類中使用,可以被繼承,但是不可以被訪問。
在類的宣告中用@protected 關鍵字修飾,該變數只能在本類和子類中使用
在類擴充套件中定義的成員變數,是私有的
在.m檔案中定義的變數,是純私有的變數,不能被繼承,也不能被訪問。
利用@property 生成的下劃線例項變數也是屬於純私有的。
description方法及重寫
description方法預設返回物件的描述資訊(預設實現是類返回類名和物件的記憶體位址)
nslog(@"%@",objecta);會自動呼叫objecta 的description方法來輸出objecta 的描述資訊
重寫description方法
view plain
copy
-(nsstring *)description
+(nsstring *)
注意:千萬不能在物件description方法中同時使用%@和self
-(nsstring *)description
//同時使用了%@和self,代表要呼叫了self 的descriptiona方法,程式進入死迴圈
黑馬程式設計師 OC學習之封裝,繼承,多型
ios培訓 android培訓 期待與您交流!面向對的三大特徵就是,我們經常提到的 封裝 繼承 多型。1.封裝 隱藏屬性 方法或實現細節的過程,不去關心你的方法是怎麼實現的,只關心你能做什麼。並且,封裝的意義在於 保護或者防止 資料 被我們無意中破壞。通常情況下我們可能會定義乙個類,比如studen...
黑馬程式設計師 OC封裝
物件導向的三大特性 封裝 繼承和多型 在開發過程中,考慮到安全性要求,我們一般不在成員變數名前面使用 public protected等關鍵字修飾,而是使用set方法來為物件提供成員變數的值。set方法的內部也可以對一些不合理的賦值進行篩選過濾。set方法的作用 為外界提供乙個設定成員變數值的方法 ...
黑馬程式設計師 OC語言 封裝
ios培訓 ios培訓 期待與您交流!封裝的實質 是指隱藏物件的屬性和實現細節,對外提供公共訪問方式,封裝是一種思想.方法預設就是用了封裝的思想.屬性有兩種方式操作 1直接操作.public 2.封裝操作 通過給外部暴露兩個方法 set方法用於設定值.get方法用於獲取值.乙個屬性的set與get方...