iOS 屬性知識之為什麼要使用copy特性

2021-12-29 16:34:55 字數 1266 閱讀 8856

ios 屬性知識之為什麼要使用copy特性

@property (nonatomic, strong) nsstring *name;

@property (nonatomic, copy) nsstring *meng;

@end

@implementation viewcontroller

- (void)viewdidload {

[super viewdidload];

[self testcopyandstrong];

//[self teststring];

- (void)testcopyandstrong {

nsmutablestring *str = [[nsmutablestring alloc] initwithstring:@"meng"];

self.meng = str;

self.name = str;

[str appendstring:@"zhiqi"];

//實際上不可變字串能拼接是因為它只是用該字串的副本來拼接

nsstring *str1 = [str1 stringbyappendingstring:@"mmm"];

//&列印指標的位址,沒有&則是列印指標所指向物件的位址

nslog(@"%p, %p", str, &str);

//strong特性,指標位址不同,但是指標所指向物件的位址相同,是淺拷貝(位址拷貝)

nslog(@"%p, %p", self.name, &_name);

//copy特性,指標位址不同,指標所指向的物件的位址也不同,是深拷貝(內容拷貝)

nslog(@"%p, %p", self.meng, &_meng);

nslog(@"%@", str);

列印出mengzhiqi,可見strong特性只是把指標所指向物件的位址拷貝了

nslog(@"%@", self.name);

nslog(@"%@", self.meng);

- (void)teststring {

nsstring *str = @"meng";

self.meng = str;

self.name = str;

//&列印指標的位址,沒有&則是列印指標所指向物件的位址

nslog(@"%p, %p", str, &str);

nslog(@"%p, %p", self.name, &_name);

nslog(@"%p, %p", self.meng, &_meng);

c 為什麼要使用介面

c 為什麼要使用介面?通俗的講,就是為了降低耦合度。給大家看乙個我見過的很搞笑的例子。看看下面的程式 乙個學校裡邊,有兩種人 學生 老師。他們都要吃飯和睡覺。public inte ce i人 public class 學生 i人 public void 睡覺 其他特有方法,比如泡妞 打遊戲 pub...

C 中為什麼要使用斷言

斷言assert是僅在debug下有效的巨集,當其中的條件為假時,觸發錯誤提示。使用斷言的目的是捕捉不應該發生的非法情況。注意 不要混淆非法情況與錯誤情況之間的區別,後者的出現是因為 錯誤,是一定要作出處理的。如何使用 1 在函式的入口處,使用斷言檢查引數的有效性 合法性 2 在編寫函式時,要進行反...

C 中為什麼有時要使用extern C

在c 引用lua的標頭檔案時,我們總會寫成 extern c 為什麼要這麼做呢?原因是c 的編譯器會對程式中符號進行修飾,這個過程在編譯器中叫符號修飾 name decoration 或者符號改編 name mangling 同時我們知道c 是能夠相容c的,如果我們有了乙個c語言的標頭檔案和其對於的...