copy: 建立一個索引計數為1的對象,然後釋放舊對象
retain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數為1
那上面的是什麼意思呢?
Copy其實是建立了一個相同的對象,而retain不是:
比如一個NSArray對象,地址為11111,內容為xx
Copy到另外一個NSArray之 後,地址為22222,內容相同,新的對象retain為1, 舊有對象沒有變化
retain到另外一個NSArray之 後,地址相同(建立一個指針,指針拷貝),內容當然相同,這個對象的retain值+1
也就是說,retain是指針拷貝,copy是內容拷貝。
什麼情況下用assign,什麼情況下用retain,什麼情況下用copy?
assign:凡是不是擁有的關系,應該使用assign,而不是retain或copy。
retain或copy:當類擁有mutable子類時,你應該使用copy,而不是retain。
例如:NSAArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString。