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