1.先用代碼示例
@interface ViewController ()
@property (strong, nonatomic) NSArray *bookArray1;
@property (copy, nonatomic) NSArray *bookArray2;
@end
@implementation ViewController
(void)viewDidLoad {
[super viewDidLoad];
[self questionDescribe];
}-
(void)questionDescribe {
NSMutableArray *books = [@[@"我是1"] mutableCopy];
self.bookArray1 = books;
self.bookArray2 = books;
[books addObject:@"你好"];NSLog(@"bookArray1(strong) = %@ \n bookArray2(copy) = %@",self.bookArray1, self.bookArray2);
}
打印出的結(jié)果是:bookArray1(strong) = (
"我是1",
"你好"
)
bookArray2(copy) = (
"我是1"
)
2.從上面我們大概能看出來strong和copy的區(qū)別了吧干茉?
使用strong毙驯,則self.bookArray1與可變數(shù)組books指向同一塊內(nèi)存區(qū)域,books內(nèi)容改變供璧,導(dǎo)致self.bookArray1的內(nèi)容改變妇穴,因?yàn)閮烧呤峭粋€(gè)東西熏迹;而使用copy船响,self.bookArray2在賦值之前膜宋,將books內(nèi)容復(fù)制,創(chuàng)建一個(gè)新的內(nèi)存區(qū)域做个,所以兩者不是一回事鸽心,books的改變不會(huì)導(dǎo)致self.bookArray2的改變。
3.說到底就是不同的修飾符居暖,對(duì)應(yīng)不同的setter方法
(1).strong對(duì)應(yīng)的setter方法顽频,是將_property先release(_property release),然后將參數(shù)retain(property retain), 最后是_property = property
(2).copy對(duì)應(yīng)的setter方法,是將_property先release (_property release),然后拷貝參數(shù)內(nèi)容(property copy),創(chuàng)建一塊新的內(nèi)存地址太闺,最后_property = property
4.property的本質(zhì)糯景?
@property = 實(shí)例變量 + getter + setter
5.下劃線和self的區(qū)別?
下劃線只代表實(shí)例變量省骂,不調(diào)用setter方法和getter方法
self會(huì)調(diào)用setter和getter方法