1.快速初始化乙個物件,並且加入自動釋放池。
1)自定義構造方法:1>先初始化父類,並判斷是否初始化成功。2>初始化子類。3>返回self。
2)定義類方法:
**:
-(instancetype) initwithname: ( nsstring * ) name
//返回self
return self;
} +(instancetype) personwithname:(nsstring * ) name
呼叫的時候
注意!!!!!!!!! 此處若使用id型別,則nsstring * s= [person initwithname:@"name"]; 也可以編譯成功,所以要使用instancetype ,可以幫助我們進行型別檢測。
2.自動釋放池的使用。
1> autorelease方法:使用autorelease方法可以將物件加入到當前物件釋放池中,在釋放池釋放的時候,對池中所有物件傳送一次release訊息。注意,無論在何處呼叫autorelease方法,都不會造成物件的釋放,此處是釋放池延緩了release訊息的傳送時間,對效能有影響。在可以確定物件釋放準確時機的時候,盡量不要使用物件釋放池。
2>@autoreleasepool關鍵字:建立乙個自動釋放池。@autoreleasepool 定義的結構。
3> 自動釋放池的棧結構:與記憶體中的堆疊不同,此處指的是自動釋放池的巢狀規則,是棧結構的。遵循先入後出原則,巢狀的時候,會按照先內後外的順序去釋放。
3.arc介紹
1>arc是編譯器特性,編譯器在合適的地方加入release ,autorelease ,retain 。底層其實還是mrc。
2>arc判斷原則:當乙個物件沒有強指標指向的時候,物件就會被釋放。_ _weak *p=[person new] 。此為建立乙個弱指標。
3>迴圈strong問題:與mrc中的迴圈retain問題一樣,此時應該乙個strong ,另外乙個使用weak。
4>mrc**相容arc:-fno-objc-arc 不使用arc,-f-objc-arc 使用arc ,在arc專案中可以使用mrc的類。
4.分類 category
1>分類的作用:將乙個類的不同方法分到不同的檔案中儲存,便於對類進行模組化設計,以及團隊合作開發。
可以在不修改原始檔的基礎上,為這個類擴充一些方法。
注意:!!! 分類中只能增加方法,無法增加例項變數。 分類中可以訪問原類的例項變數。
2>主類,分類呼叫優先順序的問題:主類,分類同時有乙個同名方法時,優先呼叫分類的。當有多個檔案含有同名方法時, 檔案編譯越晚,呼叫優先順序越高。
3> 非正式協議:給nsobject 類或者它的子類,也就是foundation框架中提供的類增加的分類,就是非正式協議。
4>延展,延展類別,擴充套件:
類擴充套件在新的 .h檔案中,為原類,增加例項變數和方法,此處為相對私有變數,相對私有方法。只能在類的內部去呼叫。
注意:::類擴充套件的方法,無法被子類繼承!!!!
類擴充套件與分類的區別:類擴充套件沒有分類名稱,所以也有人稱之為:匿名分類。
OC基礎筆記2
25,在.h檔案中定義的成員變數能直接被別人看到,如果不想被看到,可以定義在.m檔案的實現中,成為私有變數,並且只能自己呼叫 本類使用 寫法和常規定義一樣。定義乙個私有方法,是不被宣告的方法,不能被直接呼叫,需要id型別的指標,和訊息選擇器等間接呼叫。26,property也是編譯器指令,在編譯時自...
筆記2 C 對C的加強
首先是標頭檔案的引用問題,c 中引用標頭檔案不使用字尾 h 目的是為了與c語言進行區分。1 當使用時,相當於在c中呼叫庫函式,使用的是全域性命名空間,也就是早期的c 實現 2 當使用的時候,該標頭檔案沒有定義全域性命名空間,必須使用namespace std 這樣才能正確使用cout。使用c 標準程...
MyBatis加強學習筆記
通過定義resultmap來實現結果集自動封裝到指定物件並返回結果的一種對映方式 resultmap 節點 result 普通列,association 用於一對一關係對映,collection 用於一對多關係對映,也稱為懶載入,在查詢時先載入主資訊,在需要時才查詢從資訊。實現懶載入有以下三點需要注...