真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

屬性與內(nèi)存管理(屬性與內(nèi)存管理都是相互關(guān)聯(lián)的)第二部分-創(chuàng)新互聯(lián)

四,關(guān)于語義特性copy和與alloc對應(yīng)的dealloc以及初始化操作和便利構(gòu)造器的補充

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設(shè)按需網(wǎng)站開發(fā),是成都網(wǎng)站營銷推廣公司,為成都服務(wù)器托管提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站推廣熱線:18982081108

1, 語義特性copy

如果想對一個對象進(jìn)行copy操作,對象的類必須服從一個NSCopying協(xié)議,并且實現(xiàn)協(xié)議中的方法copyWithZone:,方法為(仍以Person類為例):

-(id)copyWithZone:(NSZone*)zone

{

   NSString*newSex = [[NSStringallocWithZone:zone]init];

   newSex.sex = self.sex;

   returnnewSex;

}

其中copyWithZone: 是協(xié)議NSCopying制定的方法,

2, dealloc

對于dealloc方法,由于系統(tǒng)不知道我們在開發(fā)程序時會對那些對象的語義特性聲明為retain或者copy,所以需要我們重寫dealloc方法,即如下:

-(void)dealloc

{

 [_namerelease];

 [_sexrelease];

 NSLog(@"Person空間回收了");

 [superdealloc];

}

(1), [_namerelease]和[_sexrelease]操作目的:當(dāng)調(diào)用dealloc方法時,該對象的空間將要被系統(tǒng)回收,在空間回收之前,將保有的其他對象()的所有權(quán)給釋放掉,當(dāng)該類對象的引用計數(shù)為0時,會自動調(diào)用該類的dealloc方法

(2), [superdealloc]該操作即必須通過super調(diào)用父類的方法實現(xiàn),才能將空間回收,

3, 初始化操作

-(id)initWithName:(NSString*)name sex:(NSString *)sex

{

   self =[superinit];

   if (self) {

       self.name = name;

       self.sex = sex;

   }

   returnself;

}

(1),使用self.name = name賦值方法,self.name時調(diào)用了setter方法,內(nèi)部對name進(jìn)行了retain操作,即_name也保留了name的使用權(quán),如果使用_name = name即直接賦值方法,則就表示把屬性的語義特性設(shè)為asgin,這時如果name的空間已經(jīng)被回收了,直接賦值就會出現(xiàn)野指針問題

使用self.sex = sex同理;

(4),便利構(gòu)造器

+(id)teacherWithName:(NSString*)name sex:(NSString *)sex

{

 Person*person = [[Person alloc] initWithName:namesex:sex];

   return [Personautorelease];

}

我們在使用便利構(gòu)造器時不需要再對其進(jìn)行release操作,因為內(nèi)部已經(jīng)做了autorelease操作,如果在進(jìn)行release操作會造成過度釋放,以后我們再寫便利構(gòu)造器就要這樣寫.

五,collection(集合) 的內(nèi)存管理

當(dāng)把一個對象放入集合(數(shù)組,字典,集合)中時,會將對象的引用計數(shù) + 1,因為內(nèi)部做了retain操作

例如: Person *per1 = [[Personalloc] initWithName:@"Frank"sex:@"boy"];

       Person *per2= [[Personalloc] initWithName:@"Duke"sex:@"boy"];

此時per1和per2所指向的空間的引用計數(shù)都為1,

NSMutableArray *array =[[NSMutableArray alloc ]initWithObjects:per1,per2, nil];

 這里使用便利構(gòu)造器,其內(nèi)部給添加到數(shù)組中的元素進(jìn)行了autorelease操作,這時per1和per2所指向的空間的引用計數(shù)都為2,

當(dāng)集合(數(shù)組,字典,集合)空間被回收時,他們會向容器中的每個元素發(fā)送一個release消息(對應(yīng)添加元素時的retain操作),當(dāng)從集合(數(shù)組,字典,集合)中移除一個元素時,會release該對象,引用計數(shù) - 1;

下面把對該數(shù)組對象以及存儲的對象的進(jìn)行release操作

(1),[per1release];

       [per2release];

       NSLog(@"%lu",[ per1retainCount]);

       NSLog(@"%lu",[ per2retainCount]);

       此時 per1和per2所指向的空間的引用計數(shù)都為1, array所指向的空間的引用計數(shù)為1,

NSLog(@"%@",array); 此時會輸出數(shù)組中的內(nèi)容

       [per1release];

       [per2release];

此時per1和per2的空間都被回收,因為系統(tǒng)識別到他們的引用計數(shù)都為0

       NSLog(@"%@",array);此時若再執(zhí)行該操作系統(tǒng)會crash,因為數(shù)組中存儲的對象已經(jīng)被系統(tǒng)回收了,如果輸出相當(dāng)于又對數(shù)組中被回收的空間進(jìn)行操作,是野指針問題

NSLog(@"arrayCount= %lu",[array retainCount]);

此時array所指向的空間的引用計數(shù)為1,因為array的空間沒有被回收,但不可以輸出數(shù)組

(2),[array release];

此時array所指向的空間被系統(tǒng)回收

       NSLog(@"%lu",[tea1retainCount]);

       NSLog(@"%lu",[tea2retainCount]);

此時per1和per2所指向的空間的引用計數(shù)都為1,

       NSLog(@"%@",array);此時若再執(zhí)行該操作系統(tǒng)會crash, 因為數(shù)組已經(jīng)被回收, 如果輸出相當(dāng)于對被回收的數(shù)組進(jìn)行操作,是野指針問題

 [per1release];

[per2release];

此時per1和per2的空間都被回收,因為系統(tǒng)識別到他們的引用計數(shù)都為0

NSLog(@"arrayCount= %lu",[array retainCount]);

若進(jìn)行此操作,會crash, 因為array的空間已經(jīng)被回收

(3), [per1release];

       [per2release];

此時per1和per2所指向的空間的引用計數(shù)都為1, array所指向的空間的引用計數(shù)為1,

       [arrayrelease];

此時array所指向的空間被系統(tǒng)回收,per1和per2的空間也都被回收,當(dāng)集合(數(shù)組,字典,集合)空間被回收時,他們會向容器中的每個元素發(fā)送一個release消息(對應(yīng)添加元素時的retain操作),即此時per1和per2的空間都被回收,因為他們收到了release消息,

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當(dāng)前名稱:屬性與內(nèi)存管理(屬性與內(nèi)存管理都是相互關(guān)聯(lián)的)第二部分-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/dggocj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部