最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

想問(wèn)下對(duì)于static變量,如果控制它的內(nèi)存釋放?求指點(diǎn)

想問(wèn)下對(duì)于static變量,如果控制它的內(nèi)存釋放?求指點(diǎn)

iOS
慕容708150 2023-04-24 19:15:26
A.m中聲明一個(gè)static變量static ClassA *var = nil;有一個(gè)實(shí)例方法-(void)dosomething {  var = [self create];   ... }方法create定義為- (ClassA *)create{  ClassA *ret = [ClassA methodA];//返回autorelease對(duì)象   return ret; }dosomething方法執(zhí)行一系列操作之后,調(diào)用方法- (void)somethingFinished{   [var complete];//crash,提示EXC_BAD_ACCESS}顯示是內(nèi)存問(wèn)題,以上情況是需要在create方法中retain一下嗎?
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

首先,你聲明了一個(gè)靜態(tài)的指針變量var,也就是在內(nèi)存里申請(qǐng)了4個(gè)字節(jié)的空間(假設(shè)是在32位機(jī)器上運(yùn)行),并且,你給這個(gè)空間填入了一個(gè)空值:

var => nil;

然后,在doSomething方法里,你創(chuàng)建了一個(gè)autorelease的對(duì)象,并且把這個(gè)對(duì)象的地址填到了var所在的空間里:

var => [ClassA methodA];

在doSomething方法結(jié)束后,更準(zhǔn)確點(diǎn)說(shuō),是在一個(gè)事件循環(huán)完成后,autorelease的對(duì)象被釋放了,它所在的地址變成了一個(gè)不允許訪問(wèn)的地址,而var變量因?yàn)槟銢](méi)有動(dòng)過(guò)它,所以它還忠實(shí)地保存著這個(gè)地址:

var => 非法地址

最后,你試圖去訪問(wèn)這個(gè)地址的時(shí)候,崩潰了:

[var complete];//crash,提示EXC_BAD_ACCESS

這個(gè)問(wèn)題跟var是否靜態(tài)變量沒(méi)有關(guān)系。靜態(tài)變量無(wú)法被釋放,var本身所分配的4個(gè)字節(jié)空間永遠(yuǎn)都在那里。只不過(guò),這4個(gè)字節(jié)表示的地址有可能是一個(gè)nil,也可能是一個(gè)合法地址,也可能是一個(gè)非法地址。


查看完整回答
反對(duì) 回復(fù) 2023-04-28
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

static變量只需要init一次,

static ClassA *var = nil;//在初始化方法中先init這個(gè)static對(duì)象。if(!var)
{    var = [[ClassA alloc] init];
}

如果你的變量一直要在程序運(yùn)行期間存在,就不需要release。
如果變量有一定的生命周期,結(jié)束時(shí)釋放一次。

-(void)destory
{    var = nil;
}

你得到EXC_BAD_ACCESS,要么是沒(méi)init var,要么是var已經(jīng)被釋放,看你的代碼,var沒(méi)init就直接調(diào)用了。


查看完整回答
反對(duì) 回復(fù) 2023-04-28
  • 2 回答
  • 0 關(guān)注
  • 426 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)