1、了解深拷貝和淺拷貝
iOS 里面的淺拷貝:
在 iOS 里面, 使用retain 關(guān)鍵字進(jìn)行引用計數(shù),就是一種更加保險的淺拷貝。他既讓幾個指針共用同一片內(nèi)存空間,又可以在release 由于計數(shù)的存在,不會輕易的銷毀內(nèi)存,達(dá)到更加簡單使用的目的。
iOS 里面的深拷貝:
深拷貝是指拷貝對象的具體內(nèi)容,而內(nèi)存地址是自主分配的,拷貝結(jié)束之后,兩個對象雖然存的值是相同的,但是內(nèi)存地址不一樣,兩個對象也互不影響,互不干涉。
2、Objc對象拷貝構(gòu)造:
- 在OC中要想自定義的類具有拷貝功能(也就是能用copy方法)則類必須遵守NSCopying協(xié)議,并且實現(xiàn)協(xié)議中的(id)copyWithZone:(NSZone *)zone方法;
- 在這個方法中我們可以根據(jù)自己的實際情況來實現(xiàn),不同的實現(xiàn)方式,copy出來的對象具有不同的效果
類的深/淺拷貝也就是在這個方法中體現(xiàn),具體如下 - 同理,NSMutableCopying也是可以按照下面實現(xiàn)。。。
(1)自定義淺拷貝
-(id)copyWithZone:(NSZone *)zone
{
//創(chuàng)建新的對象空間
Student *stu = [[self class] allocWithZone:zone];
//將屬性復(fù)制---其實只是復(fù)制了地址
stu.name = self.name;
stu.sex = self.sex;
stu.age = self.age;
return stu;
}
(2)自定義深拷貝
-(id)copyWithZone:(NSZone *)zone
{
//創(chuàng)建新的對象空間
Student *stu = [[self class] allocWithZone:zone];
//為每個屬性創(chuàng)建新的空間,并將內(nèi)容復(fù)制
stu.name = [[NSString alloc] initWithString:self.name];
stu.sex = [[NSString alloc] initWithString:self.sex];
stu.age = self.age;
return stu;
}
3、NSString的Copy和MutableCopy
//Copy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str copy];
NSLog(@"str地址%p ---- str1地址%p",str,str1);
//輸出,得出的結(jié)果,對NSString進(jìn)行copy只是指針拷貝
2016-07-18 22:32:06.833 深拷貝和淺拷貝[12603:1256836] str0x1090ea068 ---- str10x1090ea068
//MutableCopy
NSString *str = @"嘹亮的小浩子";
NSString *str1 = [str mutableCopy];
NSLog(@"str地址%p ---- str1地址%p",str,str1);
//輸出,得出的結(jié)果,對NSString進(jìn)行MutableCopy進(jìn)行內(nèi)容拷貝,生成新的對象
** 以下總結(jié)**

別人總結(jié)的,拿來借鑒以下
未完待續(xù)