1.屬性
assign : 純量類型 例如 : CGFloat
strong : “擁有關(guān)系” 為這種屬性設(shè)置新值時候,設(shè)置方法會先保留新值,并釋放舊值,然后將新值設(shè)置上去
weak : “非擁有關(guān)系” 為這種屬性設(shè)置新值時候,既不保留新值,也不釋放舊值。屬性所指的對象遭到摧毀時,屬性值也會清空
unsafe_unretained : 不安全,當(dāng)目標(biāo)對象遭到銷毀時,屬性值不會自動清空,這一點(diǎn)和weak有區(qū)別
copy : 與strong類似,然而設(shè)置方法并不保留新值,而是將其 copy
2.在對象內(nèi)部盡量直接訪問實(shí)力變量
比較合理折中的方案: setter 方法時 用 self.xxx 因?yàn)檫@樣可以控制對屬性的寫入操作;getter 方法時 最好用 _xxx 直接訪問。
對于不經(jīng)常用到的可以使用懶加載 訪問
3.對象等同性:
想檢測對象的等同性,請?zhí)峁癷sEqual:” 與 hash 方法
可以為自己的特定類定制等同性方法
- (BOOL) isEqualToPerson:( Person* )otherPerson{
if ( self == object ) return YES;
if ( ! [ _firstName isEqualToString:otherPerson.firstName ] ){
return NO;
}
…..
return YES;
}
4.“類族模式”
typededf NS_ENUM( NSUInteger, MKMYEmployeeType ){
MKMYEmployeeTypeDeveloper,
MKMYEmployeeTypeDesigner,
MKMYEmployeeTypeFinance,
};
+( MKMY )employeeWithType:( MKMYEmployeeType )type{
switch ( type ){
case?MKMYEmployeeTypeDeveloper :
return [?MKMYEmployeeTypeDeveloper new ];
break;
case ...
// 在switch判斷是枚舉類型的時候,最好不用用defualt,因?yàn)檫@樣在新增加枚舉類型的時候,Xcode會報(bào)出警告
}
5 runTime語句
(1)發(fā)送消息: id returnValue = objc_msgSend( someObject,
@selector( messageName: ),
parameter);
第一個參數(shù)表示消息的接受者,第二個參數(shù)代表選擇子,后續(xù)可以傳多個參數(shù)
(2)“黑盒測試” : 交換方法 void method_exhangeImplementations( Method m1, Method m2 )
此函數(shù)的兩個參數(shù)表示待交換的兩個方法實(shí)現(xiàn),方法的實(shí)現(xiàn):
Method class_get女生探測Method( Class aClass , SEL aSelector )
github:Baoy