1. __block和__weak修飾符的區(qū)別
- __block不管是ARC還是MRC模式下都可以使用恩闻,可以修飾對象激涤,還可以修飾基本數(shù)據(jù)類型。
- __weak只能在ARC模式下使用判呕,也只能修飾對象(NSString)倦踢,不能修飾基本數(shù)據(jù)類型(int)。
- __block對象可以在block中被重新賦值侠草,__weak不可以辱挥。
2. 相關父類
- UIButton 的父類是UIControl
- UIControl的父類是UIView
- UIView的父類是 UIResponder
3. OC修飾符:
可讀可寫修飾符
- readWrite: 可讀可寫修飾符,系統(tǒng)為我們創(chuàng)建屬性的getter和setter方法
- readOnly: 只讀修飾符,系統(tǒng)只為我們創(chuàng)建屬性的getter方法
- writeOnly:不可讀可寫修飾符,系統(tǒng)只為屬性生成setter方法
- 原子修飾符
- atomic: 原子修飾符,表示線程安全(系統(tǒng)默認生成atomic)
- nonatomic:非原子修飾符,使用此修飾符性能會提升
- setter修飾符(assign,copy,retain)
- assign修飾符: 修飾OC基本數(shù)據(jù)類型(NSInterger和CGFloat)和C基本數(shù)據(jù)類型(int,float,double)并且還有id類型,不涉及內存管理,如果該修飾符修飾對象類型,就會出現(xiàn)內存泄露的問題.
- retain修飾符: 修飾對象類型,當修飾基本數(shù)據(jù)類型的時候就會報錯,當設置某屬性setter方法時,先將該對象的屬性進行release操作,然后對屬性進行賦值,并執(zhí)行retain操作
- copy修飾符: 修飾基本數(shù)據(jù)類型(NSString,NSArray和NSMutableArray), 表示復制內容
(retain指針的復制,copy內容的復制, strong類似于retain,weak類似于assign)
- getter和setter修飾符
@property (getter = getMethodName, setter = setMethodName) Object *obj;
用于設置自定義生成的getter和setter方法名,使用之后就可以系統(tǒng)不會再生成getter和setter方法
小技巧:
使用assign:對基礎數(shù)據(jù)類型(如NSInteger, CGFloat)和C數(shù)據(jù)類型(int, float, double, char等), 另外還有id類型
使用copy:對NSString類型
使用retain:對其它NSObject和其子類
4. 淺復制和深復制的區(qū)別
- 淺層復制:只復制指向對象的指針边涕,而不復制引用對象本身晤碘。
- 深層復制:復制引用對象本身。
意思就是說我有個A對象功蜓,復制一份后得到A_copy對象后园爷,對于淺復制來說,A和A_copy指向的是同一個內存資源式撼,復制的只不過是是一個指針童社,對象本身資源.還是只有一份,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改著隆,這其實違背了我們復制拷貝的一個思想扰楼。深復制就好理解了,內存中存在了兩份獨立對象本身呀癣。
用網(wǎng)上一哥們通俗的話將就是:
淺復制好比你和你的影子,你完蛋弦赖,你的影子也完蛋
深復制好比你和你的克隆人项栏,你完蛋,你的克隆人還活著蹬竖。