規範上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 在面向多應用的 中,推薦使用字首...