最近項目不是太忙缩歪,閑下來總結(jié)一下容易讓程序員困擾的一些問題佛呻,如有不準(zhǔn)確的地方,還請多多指正跺撼。
ARC是蘋果為了簡化程序員對內(nèi)存的管理窟感,推出的一套內(nèi)存管理機制,對象的申請和釋放工作會在運行時歉井,由編譯器自動添加retain和release柿祈。
在開發(fā)中什么時候使用strong,什么時候使用weak哩至,什么時候使用copy呢躏嚎?
強指針Strong:
強指針:strong修飾的屬性一般不會自動釋放;
在OC中菩貌,對象默認(rèn)是強指針卢佣,在實際開放中一般屬性對象一般用strong來修飾(NSArray,NSDictionary)箭阶,在使用懶加載定義控件的時候虚茶,一般也用strong
eg:
@property (nonatomic, strong) NSArray *dataList;
@property (nonatomic, strong) UILabel *label;
懶加載控件
- (UILabel *)label {
if (_label == nil) {
_label = [[UILabel alloc] init];
}
return _label;
}
弱指針Weak:
在使用 sb 或者 xib 給控件拖線的時候,為什么拖出來的先屬性都是用 weak 修飾呢?
eg
@property (weak, nonatomic) IBOutlet UILabel *label;
原因是由于在向 xib 或者 sb 里面添加控件的時候,添加的子視圖是添加到了跟視圖 View 上面, 而 控制器 Controller 對其根視圖 View 默認(rèn)是強引用的,當(dāng)我們的子控件添加到 view 上面的時候, self.view addSubView: 這個方法會對添加的控件進行強引用,如果在用 strong 對添加的子控件進行修飾的話,相當(dāng)于有兩條強指針對子控件進行強引用, 為了避免這種情況,所以用 weak 修飾.
注意:
1. addSubView 默認(rèn)對其 subView 進行了強引用
2.在純手碼實現(xiàn)界面布局時,如果通過懶加載處理界面控件仇参,需要使用strong強指針
除此之外,我們在開發(fā)的時候用的代理 也是用 weak 進行修飾的,其目的是為了防止控件的循環(huán)引用.
@property (nonatomic, weak) id<PersonDelegate> delegate;
Copy的使用
對于 copy 的使用,網(wǎng)上已經(jīng)有很多關(guān)于 copy 介紹, 其包括深 copy 和淺 copy, 在這里我就不再多說了,如果不太明白的話可以網(wǎng)上查一下資料
copy 一般用來修飾 NSString 和 block
eg:
@property (nonatomic, copy) NSString *str;
以上內(nèi)容是對 strong 和 weak的個人理解,后續(xù)會持續(xù)完善,今天就寫到這里,現(xiàn)在要繼續(xù)寫代碼了.