黑马程序员——OC语言基本语法知识(一)
通過 指針->成員變量名 方式給成員變量賦值具有危險(xiǎn)性,?可能被賦值為不合理的數(shù)值。不允許通過指針直接修改成員變量,?就要去掉@public。?通過方法來修改成員變量的值,?方法中可以加代碼保證接收的值是合理的賦值。
?
設(shè)置成員變量屬性值的方法,?通常稱為該屬性的set方法,?命名方式為?setAge: ,?接收一個(gè)相同類型的參數(shù),形參的名稱不能和成員變量名相同。
?舉例:
?
在?main函數(shù)中調(diào)用set方法:
[stu setAge:18]; ? ?//?賦值為18
[stu setAge:-18]; ? //?默認(rèn)賦值為1
?
以后就不要寫@public了,?必須要通過set方法來設(shè)置成員變量。?可以保證成員變量數(shù)據(jù)的合理性。
?
二、 get方法
?
沒有@public,?我們就不能通過?stu->age?來查看成員變量的值?(被保護(hù))。我們要通過調(diào)用方法來返回成員變量值。
?
get方法:?返回該對象的成員變量值。
?舉例
?
在main函數(shù)中調(diào)用get方法獲得age屬性的值:
int myAge = [stu age];
?
注意:?不是所有的成員變量都有set和get方法,?如果有的成員變量是只讀屬性(read only),?只能被訪問,?不能被修改,?這樣的情況就可以只提供get方法,?不寫set方法。
?
三、 封裝的好處
封裝可以保證數(shù)據(jù)的安全性。?如果要給成員變量賦值,?必須通過set方法進(jìn)行訪問,?在set方法中,?可以添加對不合理的屬性值的過濾。
?
四、 命名規(guī)范
?
在get方法中,?方法名和返回的成員變量名是一樣的,?可讀性不好。?所以規(guī)范成員變量名以下劃線開頭,?便于和get方法名和局部變量名區(qū)分。
?
成員變量名規(guī)范以?
?
*** 繼承 ***
?
一、 基本概念
類B繼承了類A,?那么類B具有類A的所有屬性和方法。
在OC中繼承關(guān)系用?:?表示。
比如我們要寫一個(gè)Dog類和一個(gè)Cat類,?兩個(gè)類擁有相似的成員變量和方法,?不想把代碼復(fù)制很多遍。可以寫一個(gè)Animal類,?把貓和狗相同的內(nèi)容放到Animal里,?然后讓Dog和Cat繼承Animal類。
?
二、 優(yōu)缺點(diǎn)
繼承的好處:?子類擁有父類的所有成員變量和方法,?減少重復(fù)代碼.?建立類之間的關(guān)系。
?
繼承的缺點(diǎn):?代碼耦合性太強(qiáng)?(類之間的關(guān)系太緊密,?如果某個(gè)類壞了,?另一個(gè)類會受影響)。
?
我們的類如果不繼承NSObject就沒有new方法,?就沒有創(chuàng)建對象的能力。我們的類能夠調(diào)用new方法,?說明NSObject類擁有new方法。可以查看NSObject類的說明,?找到?+new?方法。
NSObject是基類,?幾乎所有的類最終都是繼承于它。也有的類不是繼承NSObject的,?比如NSProxy,?它也是一個(gè)基類。
?
子類有自己的成員變量方法和父類的所有成員變量和方法?(以及父類的父類的)。
?
*** 多態(tài) ***
有繼承才有多態(tài)。
多態(tài)就是可以用父類的指針指向子類的對象.?不管用什么指針,?調(diào)用方法時(shí)調(diào)用的都是對象的方法。
?
一、 多態(tài)的好處:
?
可以使用父類指針來代表各種子類對象調(diào)用函數(shù),節(jié)省代碼。
?
比如,?我們有一個(gè)Cat類,?有eat方法;?還有一個(gè)Dog類,?也有eat方法
?
??
我們想寫函數(shù)來喂動物,?喂Dog和Cat由于參數(shù)類型不同,?需要對每種類型都寫一個(gè)函數(shù):
?
?
?
這兩個(gè)函數(shù)體是很相似的,?而且如果有更多的動物,?還要寫很多相似的函數(shù),?很麻煩,?還要使用不同的名字。
這樣,就可以使用多態(tài)來簡化,寫一個(gè)Animal類,?作為Dog?和Cat的父類,?這樣在函數(shù)中就可以使用Animal *指針,?來指代Dog或Cat類型的參數(shù):
?
?
這樣只需要寫一個(gè)函數(shù),?很方便,?而且調(diào)用的還都是每個(gè)對象自身的方法。
?
二、 多態(tài)的局限性
?
不建議用父類指針調(diào)用子類的特有方法。
如果用父類指針調(diào)用子類在父類中沒有的方法,?雖然調(diào)用的是子類對象的方法,?但是編譯器會報(bào)警告,?因?yàn)樗荒芸吹接酶割惖闹羔樥{(diào)用一個(gè)父類沒有的方法。
舉例
轉(zhuǎn)載于:https://www.cnblogs.com/HtercelH/p/4033735.html
總結(jié)
以上是生活随笔為你收集整理的黑马程序员——OC语言基本语法知识(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全局变量、局部变量、静态全局变量、静态局
- 下一篇: CImage 是基于GDI+的,很老的一