IOS物件複製問題

2021-06-07 04:51:13 字數 576 閱讀 3673

某次面試,面試官寫出一段**,問我這段**有什麼問題嗎:

具體**如下:

@implementation person

- (void)setname:(nsstring*)newname

@end

咋看之下,這不就是定義person類中的屬性age的setter方法嘛。但是跟我們的書寫習慣有點不一樣,感覺怪怪的!還是先寫出我們的習慣寫法吧!

@implementation person

- (void)setname:(int)newname

}@end

可以看到我們的習慣寫法基本上不會出現什麼問題,而最前面的那種寫法會有問題呢?

最前面的寫法的結果是name和newname都指向了同乙個物件。當在呼叫setname:方法之後,如果newname的值被修改,那麼name的值也將被修改,這應該不是我們想要的結果吧(如果你是想達到這種效果,個人認為,這樣寫也是一種絕妙的寫法)!所以用copy來拷貝newname的值到name上,其實現的是呼叫乙個alloc方法加上initwithstring:newname來建立乙個新的字串物件。

終於明白兩者的差別了吧!哈哈。。。

iOS中深複製和淺複製問題

nsdictionary 物件,新增內容,然後通過 產生可變和不可變副本,這些複製是深複製還是淺複製?那麼對於可變物件呢?為什麼nsstring定義屬性時需要用copy呢?copy屬性和copy物件有什麼不同?首先先說一下 copy 和retain 的區別 copy 是建立乙個新物件,是內容拷貝。r...

iOS深複製和淺複製

淺複製示例 nsmutablearray marray nsmutablearray arraywithobjects nsmutablestring stringwithstring origiona nsmutablestring stringwithstring origionb nsmuta...

iOS 深複製和淺複製

一 copy與retain的區別 1 copy是建立乙個新物件,retain是建立乙個指標,引用物件計數加一。2 copy屬性表示兩個物件內容相同,新的物件retain為1,與舊有的物件的引用計數無關,舊有物件沒有改變。copy減少物件對上下文的依賴。3 retain屬性表示兩個物件位址相同 建立乙...