property的修飾 retain、strong、weak、assign、copy的概念

1.perproty後面有2個參數,以及各自概念 ?
strong 這是一個強引用,指向一塊內存區域,意思就是保存這個指針對象的內存直到使用結束。
weak 的含義是當weak指向的對象已經沒有了的時候,他會被清除內存,並且賦值爲nil;
assign 的含義是隻是賦值,凡是不是擁有的關係,都可以用assign,而不是retain,和copy,在arc當中可以用weak代替;
retain 是指針拷貝 同時索引技術加一 setter裏面的方法是release舊值在retain 指針拷貝;
copy 內容拷貝, 首先copy的意思是兩個對象的內容一樣,和舊的對象沒有任何關係;

什麼時候用strong ?
所有實例所擁有的對象都應該用strong;arc模式下
什麼時候用weak?
所有實例所不擁有的對象都應該用weak;
什麼時候用assign 所有的基礎類型都應該用assign
什麼時候用retain?
只是拷貝指針,當想讓對象繼續保留的時候需要retain;
什麼時候用copy?
當想要創建一個全新的對象並且內容還是一樣的時候需要用到copy;

爲什麼NSString用Copy去修飾

#pragma mark -- //本質的區別在於  NSString 是一個常量,  而NSMutableString是一個變量
    // Do any additional setup after loading the view, typically from a nib.
#pragma  mark -- copy的使用特性
    //這樣深刻的表達了爲什麼nstring用copy 而不用strong了  兄弟們看代碼!
//  NSString *string = [NSString stringWithFormat:@"cba"];
    NSMutableString *string = [[NSMutableString alloc]init];
//    string.string = @"abc";
//    string = @"abc";
    self.strongString = string;
    self.copyedString = string;
    string.string = @"cba";
//    string = @"cba";
    NSLog(@"origin string:%@, %p, %p",string, string, &string);
    //當可變字符串中的值改變的話,strong修飾的變量的值也跟着改變, 而且其中值的地址是不變的,  只不過變量本身的指針改變了,  所有strong 只是指針拷貝;
    NSLog(@"strong string: %@, %p, %p",_strongString, _strongString, &_strongString);
    //當可變字符串中的值改變了,copy修飾的變量其中的值並沒有跟着改變,並且其中的
    NSLog(@"copy string: %@, %p, %p",_copyedString, _copyedString, &_copyedString);

下面是打印的結果:

2016-03-05 01:47:30.498 property[5290:775487] origin string:cba, 0x7fc9d3db60d0, 0x7fff54eb2888
2016-03-05 01:47:30.499 property[5290:775487] strong string: cba, 0x7fc9d3db60d0, 0x7fc9d3c61208
2016-03-05 01:47:30.500 property[5290:775487] copy string: abc, 0xa000000006362613, 0x7fc9d3c61210

上面的代碼大概意思是對NSString,爲什麼用copy做了一下驗證!
爲了防止strong修飾的a被b所指向的時候,如果改變這個b的值那麼a的值也將會改變,所有用copy;

以前只是在印象筆記當中做一些筆記,第一次寫博客,如果有不對的地方或者不完整的地方多多指正 , 希望大家能多多關照!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章