Objective C中copy屬性的概述

2021-07-08 20:04:14 字數 1082 閱讀 4462

規範上nsstring做屬性都是寫成copy的,理論上應該是複製了字串而不是單純的增加引用計數,其實問題只會出現在把nsmutablestring賦值給nsstring的時候。

objective-c** 

@inte***ce demo : nsobject  

@property (nonatomic, retain)nsstring *retainstring;  

@property (nonatomic, copy)nsstring *copystring;  

@end  

@implementation demo  

@synthesize retainstring;  

@synthesize copystring;  

-(void)dealloc  

@end  

demo *o = [[demo alloc] init];  

nsmutablestring *s1 = [[nsmutablestring alloc] initwithcapacity:100];  

[s1 setstring:@"****you"];  

o.retainstring = s1;  

o.copystring = s1;  

nslog(@"retain string is %@", o.retainstring);  

nslog(@"copy string is %@", o.copystring);  

[s1 setstring:@"****me"];  

nslog(@"retain string is %@", o.retainstring);  

nslog(@"copy string is %@", o.copystring);  

這樣就可以看出,當使用retain方式的時候,nsmutablestring的內容變化時,語義上應該不可變的nsstring也變化了,而用copy則是始終保持賦值時的內容。

如果對實際型別就是nsstring的物件用了copy,那其實就是retain,你可以通過觀察引用計數來發現,而且就語義上來說也完全沒有問題,同時也避免了不需要的字串拷貝的消耗.

copy模組中的copy與deepcopy的區別

每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...

oracle sqlplus中copy命令的用法

一 語法 首先明確sql plus copy command不是乙個方法或是函式,也不是乙個sql語句,它是乙個命令 command 這個命令 必須在sql plus裡執行。sql plus copy command的語法 二 引數說明 from database 源資料庫 to database ...

objective c中命名規範

一 關於objective c中類的命名規範 1 類名 及其 category name 和 protocal name 的首字母大寫,寫使用首字母大寫的形式 分割單詞。駝峰標示 2 在面向特定應用的 中,類名應盡量避免使用字首,每個類都使用相同的字首影響可讀性。3 在面向多應用的 中,推薦使用字首...