一、關鍵字通常用在修飾哪些屬性?
這里主要介紹ARC環境下的屬性關鍵字的使用
? ? weak:相當于assign,用于修飾弱引用的屬性,與assign不同的地方是,weak會在對象消失的時候自動把指針置為nil,常用于UI控件。
? ??assign:常用于基本數據類型、枚舉、結構體等非OC對象類型。
? ??strong:相當于retain,用于修飾強引用的屬性,釋放舊的對象,將舊的對象的值賦予新的對象,并增加索引計數+1,一個對象發生改變另一個對象也變化,就像人與影子的關系一樣,常用于指針變量,如NSObject及其子類。
? ? copy:建立一個索引計數為1的對象,然后釋放舊的對象,一個對象發生變化不影響另一個對象,就像人與其他人的關系一樣,常用于NSString類型、block類型。
二、關鍵字的區別
1.weak和strong關鍵字的區別
? ? weak和strong不同的是,當一個對象不再有strong類型的指針指向它的時候,它會被釋放,即使還有weak型指針指向它。一旦最后一個strong型指針離去 ,這個對象將被釋放,所有剩余的weak型指針都將被清除。
2.strong(retain)和copy關鍵字的區別
strong是指針拷貝,copy是內容拷貝。
? ? 使用strong修飾的屬性,進行對象賦值后就像人與影子的關系,人在動影子也在動,一個對象改變另一個對象也跟著變化。代碼示例如下:
@property(strong) NSString *myObject;
NSMutableString*otherObject = [NSMutableString stringWithFormat:@"abcd"];
self.myObject= otherObject;
[otherObject appendString:@"123"];
NSLog(@"%@",self.myObject);//輸出@“abcd123”
? ? 使用copy修飾的屬性,進行對象賦值后就像人與人的關系,敵動我不動,一個對象改變不影響另一個對象。
@property(copy) NSString *myObject;
NSMutableString*otherObject = [NSMutableString stringWithFormat:@"abcd"];
self.myObject= otherObject;
[otherObject appendString:@"123"];
NSLog(@"%@",self.myObject);//輸出@“abcd”