本帖最后由 nsswift 于 2015-6-15 09:09 编辑
Copy其实是建立了一个相同的对象,而retain不是如图:
比如一个Car对象 Car *car1 =[ [Car alloc]init]; 如果使用retain Car *car2 = [car1 retain];这样如果使用car1对对象中的属性进行改变这样car2指向对象的值也会改变,因为car1 car2指向的是同一个对象。 如果使用copy 这样就相当于两个对象,两个对象的值是相同的,原来的对象引用计数不变,新copy的对象的引用计数为1. NSString是只读的,那么为什么一般NSString都用copy呢? 由于纯NSString是只读的, 所以retain和copy的结果一样。但是NSString的子类NSMutibleString是可以修改的父类可以指向子类(多态知识)为了防止mutable string被无意中修改, 所以NSString一般用copy而不是用retain。 file:///c:/documents and settings/administrator/application data/360se6/User Data/temp/Center.jpg
|