芒果iOS開發之記憶體管理二
/********** OC第十講記憶體管理 **********/
主要內容
1.屬性的內部實現原理
2.dealloc內釋放例項變數
3.便利構造器方法的實現原理
4.collection的記憶體管理
/******* 1.屬性的內部實現原理 ********/
/*
屬性的語義設定以及使用範圍
1.assign
2.retian
3.copy
*/
//把物件型別的屬性語義設定成assign
//person1的引用計數為1
Person *person1 = [[Person
//sex的retainCount為1
NSString *sex = [[NSString alloc] initWithFormat:@"%@",@"男"];
NSLog(@"sex.retainCount = %lu", sex.retainCount);
person1.gender = sex; //等價於 [person1 setGender:sex];
//物件在使用完之後就需要釋放
[sex release];
//sex的retainCount為0,此時已被dealloc方法釋放,再訪問該物件就會引起野指標訪問異常
NSLog(@"sex = %@", person1.gender);
[person1 release];
//把物件型別的屬性語義設定成reatin
//person2的retaincount為1
Person *person2 = [[Person alloc] init];
//name此時的retaincount也是1
NSString *xingming = [NSString stringWithFormat:@"%@",@"周杰倫"];
NSLog(@"xingming.retainCount = %lu", xingming.
//person2的屬性name語義關鍵字是retain,也就是會持有xingming,讓xingming的引用計數又+1,此時xingming的retaincount為2
person2.name = xingming;
NSLog(@"xingming.retainCount = %lu", xingming.retainCount);
//當我們不需要的時候就釋放自己得所有權。
[xingming release]; //release之後引用計數-1
NSLog(@"xingming.retainCount = %lu", xingming.retainCount);
//當person2釋放的時候,會連帶xingming的所有權也釋放掉,此時xingming的引用計數變成0,會系統自動釋放
[person2 release];
//列印結果
2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 1
2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 2
2015-11-16 11:14:28.251 OC-LessionTen[1170:51432] xingming.retainCount = 1
當person2釋放的時候,同時釋放掉xingming的所有權,那麼xingming也會被釋放掉。