0
的深度複製,我試圖讓使用另一個NSMutableAttributedString
稱爲textBackup
的NSMutableAttributedString
稱爲text
的深層副本。兩者都設置爲@property (nonatomic, retain)
屬性,我創建了備份操作如下:問題使NSMutableAttributedString
NSMutableAttributedString *textBackupTemp = [self.text mutableCopy];
self.textBackup = textBackupTemp;
[textBackupTemp release];
然後後來,當某個場景出現時,我需要恢復副本:
NSMutableAttributedString *textTemp = [self.textBackup mutableCopy];
self.text = textTemp;
[textTemp release];
這似乎是工作罰款,但下一次我訪問text
類似如下:
[self.text.string characterAtIndex: self.cursor.position-1]
我得到以下錯誤:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString characterAtIndex:]: Range or index out of bounds'
字符串大小已更改爲1,而不是像它應該是43。這裏可能會發生什麼......
編輯:更新了問題。
mutableCopy實際上並不返回新的實例,儘管它的名稱。如果原始對象是可變的,它只是返回一個指向它的指針,並增加它的保留數(如果我的內存服務,我知道這是如何完成常規副本)。它只返回一個新對象,原始對象是不可變的。 – borrrden
看到我的意見下面rishi @borrrden –
@borrrden這只是相反的。 – paulmelnikow