點語法
基本使用:
[p setAge = 10];就等價于p.age = 10;
意思就是這兩種寫法都是正確的,而且他們的功能也是一樣的,但是我們的點語法要比我們以前的寫法要方便的多
使用注意:
1布隔、點語法的本質(zhì)是方法的調(diào)用离陶,而不是訪問成員變量,(這和Java有些不同)
2衅檀、如何驗證點語法的本質(zhì)是set方法招刨,還是get方法?
凡是賦值的都是我們的set方法哀军,代碼類似于:
上面的一行就是我們set方法的調(diào)用沉眶,下面那一行就是我們get方法的調(diào)用
注意點:self.age = age;這樣的代碼會陷入死循環(huán)的。因為這個代表的意思是:將我們的自己的age變量賦值給自己排苍,如果執(zhí)行這一段代碼系統(tǒng)就會不斷地調(diào)用沦寂。另外注意即使這個是錯的学密,但他依舊是我們set方法的調(diào)用
相同于我們上面的self.age = age;我們的return self.age淘衙;也是回讓我們的系統(tǒng)陷入死循環(huán)
點語法只是簡單的方法調(diào)用,而不是直接訪問成員變量腻暮。
成員變量的作用域
分4種:
圖中黃色部分的類型我們不經(jīng)常使用的
1彤守、@public :在任何地方都能直接訪問對象的成員變量
2、@private:只能在當前類的對象方法中直接訪問哭靖,意思就是不可以在main函數(shù)中直接訪問(@implementation中創(chuàng)建成員變量默認就是@private)
3具垫、@protect:能在當前類和子類的對象方法中直接訪問(@interface默認就是@protect)
4、@package :只要處于同一個框架中就可以直接訪問對象的成員變量
a试幽、在類的實現(xiàn)中我們可以在成員變量(即是在我們類的.m文件中)但是這個默認是私有的
b筝蚕、我們在@implementation中寫的成員變量名不能與我們再@interface中的成員變量名重復
使用注意與補充
1、我們的類只能繼承一個父類
2铺坞、父類即是超類起宽,只是不同的人的叫法不同 ?英文:superclass
@property與@synthesize
如何讓我們的Xcode幫助我們寫一些成員變量的set方法與get方法?
@property就是幫助我們生成某個成員變量的set方法與get方法的聲明
@synthesize 就會幫助我們直接生成某個成員變量的set方法與get方法的實現(xiàn)济榨,并且會使我們直接訪問到我們的成員變量坯沪。
第一個age代表著是對我們age這個成員變量的實現(xiàn),后面的_age代表著是訪問我們的成員變量擒滑,而不是訪問其他成員變量
是個方法與get方法的最簡寫法:遇到相同類型的成員變我們可以同時寫腐晾,只需要我們將其用逗號隔開。
最好的是分開寫丐一。
@property ?age藻糖;這行代碼完成了三件事,:
1库车、給我們的類擴充一個成員變量
2巨柒、給我們的成員變量進行set方法與get方法的聲明與實現(xiàn)
3、給我們的成員變量set方法get方法實現(xiàn)
使用細節(jié):
補充:id:萬能指針,可以指向任何OC對象 ? ? ?id相當于NSObject ?*
構造方法
基本概念:
完整的創(chuàng)建一個對象:
1潘拱、分配儲存空間 ? ? ? ? 調(diào)用new中的類方法: ?+alloc
2疹鳄、初始化 ? ? ? ? ? ? ? ? ? ?調(diào)用new中的對象方法 ? -init
構造方法就是init方法,構造方法:用來初始化對象的方法芦岂,是對象方法瘪弓,以減號開頭
重寫init方法
要求:
做法:
當然最簡單的寫法,即是以后的寫法:
重寫構造方法的目的:為了讓對象創(chuàng)建出來禽最,成員變量就會有一些固定的值
重寫構造方法的注意點:
1腺怯、先調(diào)用父類的構造方法([super ?init])
2、再進行子類內(nèi)部的成員變量的初始化
init方法的執(zhí)行過程
上面的是調(diào)用父類的init方法初始化父類的成員變量川无,后再調(diào)用子類init方法呛占,將子類的成員變量初始化
自定義構造方法
規(guī)范:
1、一定是對象方法懦趋,以減號開頭
2晾虑、返回值一般是id類型
3、方法名要以initWith開頭
方法的聲明:
方法的實現(xiàn):
方法的調(diào)用:
當我們的Student子類需要調(diào)用關于年齡仅叫、學號帜篇、名字的時候(這時候年齡、名字是屬于我們Person這個父類的)由于我們的年齡是private的作用域所以我們不能直接利用以前的方法來
這個時候就需要我們調(diào)用關于他們的set方法以及get方法诫咱。具體的代碼格式如下:
這樣一寫就成功的將我們傳入的內(nèi)容賦值給我們內(nèi)部的成員變量了
但是我們不建議利用上面的方式原因:
麻煩笙隙,一旦父類要改子類同樣要改
最簡單的方法(開發(fā)中最常見的方式)就是:
這樣就完成了上上圖中的代碼要完成的工作了
將父類的成員變量傳給父類去初始化,子類的成員變量交給子類去初始化好處:
1坎缭、自己的東西自己管竟痰,別人的東西不要插手
2、一旦 我們的父類的成員變量名稱發(fā)生改變掏呼,子類就不需要插手
注意:if開頭的代碼的作用就是將我們name 坏快、age傳遞到我們父類進行初始化