Objective-C深複製和協議

來源:互聯網
上載者:User

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訊息 

4.實現copyWithZone方法,例:

       

-(id)copyWithZone:(NSZone *)zone

{

         Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];

         return stu;

}

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

則:Student stu2 = [stu1 copy];

實現stu2是stu1的副本,這裡是深複製,stu1和stu2分別對應不同記憶體。

 

5. 如果你的類產生了子類,那麼copyWithZone:方法也將

被繼承

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

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

 如果編寫一個類的copyWithZone:方法那麼子類的方法應該先調用父類的copy方法以複製繼承來的copy執行個體變數.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.