@public的成員可以被隨意賦值,應該使用set方法和get方法來管理成員的訪問(類似機場的安檢、水龍頭過濾,過濾掉不合理的東西),
比如殭屍的生命值不能為負數。
取值方法和設值方法通常稱為訪問器(
accessor
)方法
1)
作用:用來設定成員變數,可以在方法裡面過濾掉一些不合理的值
2)
命名規範:
方法都是以
set開頭,而且後面跟上成員變數名,成員變數名的首字母必須大寫
形參名稱不要跟成員變數同名
1)
作用:返回物件內部的成員變數
2)
命名規範:
get方法的名稱一般就跟成員變數同名
成員變數都以下劃線_開頭
作用:
可以跟get方法的名稱區分開
可以跟其他區域性變數區分開,一看到下劃線開頭的變數,肯定是成員變數
#import // 宣告
@inte***ce car: nsobject
/*set方法*/
- (void)setwheels:(int)wheels;
/*get方法*/
- (int)wheels;
@end
@implementation car
//set方法的實現
- (void)setwheels:(int)wheels
_wheels = wheels;
}//get方法的實現
- (int)wheels
@end
過濾不合理的值
遮蔽內部的賦值過程
讓外界不必關注內部的細節
儘管編譯器的容錯能力比較強,但是寫**必須規範
#import @inte***ce person : nsobject
@end
@implementation person
@end
int main()
a.以上**,沒有test方法的宣告和實現,編譯和鏈結都不會報錯,能生成可執行檔案。在編譯時只會有乙個警告:warning:'person' may not respond to 'test' [p test];
但是,一旦執行程式就會出錯,程式會閃退,報的錯誤(經典錯誤)如下:
-[person test]: unrecognized selector sent to instance0x7fd2ea4097c0
給person物件傳送了乙個不能識別的訊息
b.如果以上**,有test方法的宣告,沒有test方法的實現,編譯和鏈結也不會報錯,也能生成可執行檔案,在編譯是也有乙個警告。
但是,一旦執行程式就會出錯,程式會閃退,報經典錯誤
c.如果以上**,沒有test方法的宣告,有test方法的實現,編譯和鏈結也都不會報錯,並且沒有警告,並且可以執行。
總結:
oc是在執行過程中才會檢測物件有沒有實現相應方法
黑馬程式設計師 Set
asp.net android ios開發 net培訓 期待與您交流!1 set 元素無序,唯一 2 hashset 底層資料結構是雜湊表,依賴兩個方法 hashcode 和equals 3 treeset 底層資料結構是二叉樹,根據返回值是否為0,判斷元素是否重複。排序有兩種方案 元素具備比較性 ...
黑馬程式設計師 OC封裝
物件導向的三大特性 封裝 繼承和多型 在開發過程中,考慮到安全性要求,我們一般不在成員變數名前面使用 public protected等關鍵字修飾,而是使用set方法來為物件提供成員變數的值。set方法的內部也可以對一些不合理的賦值進行篩選過濾。set方法的作用 為外界提供乙個設定成員變數值的方法 ...
黑馬程式設計師 java基礎 封裝
asp.net unity開發 net培訓 期待與您交流!封裝表示吧資料項和方法隱藏在物件內部,在類定義中用private關鍵字來實現封裝。封裝有什麼好處?用private把類的細節與外界隔離起來,從而實現資料項和方法的隱藏,而要訪問這些資料項和方法唯一的途徑就是通過類本身,類才有資格呼叫它所擁有的...