第30條:以ARC簡(jiǎn)化引用計(jì)數(shù)

使用ARC時(shí)必須遵循的方法命名規(guī)則
將內(nèi)存管理語(yǔ)義在方法名中表示出來(lái)早已成為Objective-C的慣例,而ARC則將之確立為硬性規(guī)定。這些規(guī)則簡(jiǎn)單地體現(xiàn)在方法名上。若方法名以下詞語(yǔ)開(kāi)頭,則將其返回的對(duì)象歸調(diào)用者所有:
alloc
new
copy
mutableCopy
歸調(diào)用者所有的意思是:調(diào)用上述四種方法的那段代碼要負(fù)責(zé)釋放方法所返回的對(duì)象。

若方法名不以上述4個(gè)詞語(yǔ)開(kāi)頭,則表示所返回的對(duì)象不歸調(diào)用者所擁有。在這種情況下,返回的對(duì)象會(huì)自動(dòng)釋放,所以其值在跨越方法調(diào)用邊界后依然后效。要想使對(duì)象多存活一段時(shí)間,必須令調(diào)用者保留它才行。維系這些所需的全部?jī)?nèi)存管理均有ARC自動(dòng)處理。

  • (EOCPerson )newPerson
    {
    EOCPerson person = [[EOCPerson alloc] init];
    return person;
    /

    The method name begins with 'new' and since 'person' already has an unbalanced +1 retain count from the alloc, no retains, releases, or autoreleases are required when returning
    **/
    }

  • (EOCPerson )somePerson
    {
    EOCPerson person = [[EOCPerson alloc] init];
    return person;
    /

    The method name does not begin with one of the "owning" prefiexes, therefore ARC will add an autorelease when return 'person'
    **/
    }

  • (void)doSomething
    {
    EOCPerson personOne = [EOCPerson newPerson];
    EOCPerson personTwo = [EOCPerson otherPerson];
    /

    At the point , 'personOne' and 'personTwo' go out of scope , therefore ARC needs to clean them up as required .
    ----'personOne' was returned as owned by this block of code, so ti needs to be released
    ----'personTwo' was not returned as owned by this block of code, so does not need to be released
    }

ARC通過(guò)命名約定將內(nèi)存管理規(guī)定標(biāo)準(zhǔn)化。

變量的內(nèi)存管理的語(yǔ)義:
ARC也會(huì)處理局部變量與實(shí)例變量的內(nèi)存管理。默認(rèn)的情況下,每個(gè)變量都是指向?qū)ο蟮膹?qiáng)引用。

我們經(jīng)常會(huì)給局部變量加上__weak修飾符,用以打破由“塊”所引入的保留環(huán)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,251評(píng)論 0 38
  • ARC是一個(gè)編譯器特征,它提供了對(duì)OC對(duì)象自動(dòng)管理內(nèi)存。ARC讓開(kāi)發(fā)者專(zhuān)注于感興趣的代碼和對(duì)象的關(guān)系,而不用考慮對(duì)...
    jiaoguifeng閱讀 608評(píng)論 0 1
  • Lily_3efe閱讀 166評(píng)論 0 0
  • 學(xué)習(xí)和教師講解了多少內(nèi)容無(wú)關(guān),學(xué)習(xí)就是學(xué)生的收獲。課程結(jié)構(gòu)越合理學(xué)習(xí),方向越明確,學(xué)生的收獲就越多。 ...
    那些零碎的記憶閱讀 513評(píng)論 0 0
  • 還由曾記得童年時(shí),最喜歡的游戲就是靜靜地看著,防盜網(wǎng)上掛著的小雨滴。大雨過(guò)后,天空一片蔚藍(lán),陽(yáng)光斜照在窗臺(tái)上把小雨...
    深夜人閱讀 829評(píng)論 0 1

友情鏈接更多精彩內(nèi)容