Objective-C深複製和協議

1.簡單複製只能實現淺拷貝:指針賦值,使兩個指針指向相同的一塊內存空間,操做不安全。安全

2. Foundation類已經遵照了<NSCopying>和 <NSMutableCopying>協議,即實現了copy和mutableCopy方法,所以Foundation對象能夠使用這些方法建立對象的副本或可變副本函數

@protocol  NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
@protocol  NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end

3.用戶自定義類遵照<NSCopying>協議和<NSMutableCopying>協議,則必須實現copyWithZone方法和mutableCopyWithZone方法,不然該類對象沒法響應copy和mutableCopy消息 spa

4.實現copyWithZone方法,例:指針

-(id)copyWithZone:(NSZone *)zone
{
         Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];
         return stu;
}


對應main函數中:假設已經有一個Student對象stu1;code

則:Student stu2 = [stu1 copy];對象

實現stu2是stu1的副本,這裏是深複製,stu1和stu2分別對應不一樣內存。繼承

 

5. 若是你的類產生了子類,那麼copyWithZone:方法也將內存

被繼承it

Student *stu = [[Student allocWithZone: zone] init];io

 該方法應該改成: Student *stu = [[[self class] allocWithZone: zone]init];

 若是編寫一個類的copyWithZone:方法那麼子類的方法應該先調用父類的copy方法以複製繼承來的copy實例變量.

相關文章
相關標籤/搜索