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語言的標頭檔案和其對於的...