Objective-C關於非ARC模式下的對象引用計數

來源:互聯網
上載者:User

標籤:c++   nsobject   成員   相容   引用   編程   pre   code   cti   

Objective-C是一門簡潔、強大、靈活的既具有物件導向特性也具有函數式編程特性的程式設計語言。由於它是C語言的馬甲,也就是說,Objective-C可以將其原始碼先轉為純C語言然後再編譯為最終的目標代碼,所以我們也可以用它來寫純C語言代碼,它與C是完全相容的!(這點與C++在文法特性上跟C語言相容的特性不同)

由於有不少Objective-C愛好者對於ARC模式下的Objective-C感到十分困惑,所以希望能深入瞭解一下傳統非ARC模式下的編程法則。通過對非ARC模式Objective-C工作模式的認知,我們甚至可以對整個Cocoa Framework的運行核心做更深層的認知。為何我不推薦使用ARC模式呢?

你用了ARC就得去記__strong、__weak、__unsafe_unretained、__autoreleasing、__bridge等等雜七雜八的關鍵字~這些亂七八糟的概念本身會把你搞暈,而且當你半懂不懂的時候一旦亂用反而會產生各種奇怪的bug~這些玩意兒倘若充斥在你的代碼中,一來很醜,二來對於一些新手很容易被弄暈……所以說,ARC這貨自其出生就帶來了許多災難!

而反觀傳統的非ARC模式,property就一個assign,一個retain,NSObject裡就調用retain/release和autorelease方法~而且Apple對此的規則也非常簡單——“不是你建立的就不需要你釋放;是你建立的你才去釋放它。”這一句話就能解決所有問題~

除此之外,無論你用ARC還是非ARC,你都需要搞懂Apple Cocoa Framework的訊息迴圈機制,即autorelease是如何工作的。否則你的assign或weak屬性的Objective-C對象啥時候被釋放也都不會知曉~

綜上所述,如果為了編程方便、可維護、可擴充,我們完全可以把ARC編譯選項給關掉!另外,在Objective-C中往往把“方法調用”闡述為“訊息發送”。比如[obj msg]一般大家描述為obj對象調用其msg成員方法。而正式用語上應該描述為向obj對象發送msg訊息。在哪個對象的方法裡執行這條語句的,那麼稱該對象為訊息寄件者;msg稱為訊息(即方法);obj則稱為訊息接收者。講了那麼多,下面開始切入正題!

在基於Foundation/Cocoa Framework的Objective-C中,我們定義一個類往往需要繼承NSObject這一Foundation的基類。當我們調用NSObject的alloc類方法時,就會給要建立的對象分配儲存空間;然後緊接著調用NSObject的init成員方法對建立的對象做初始化。這裡就會對此對象做引用計數設定為1的操作。在基於Foundation/Cocoa Framework的Objective-C與傳統的C++不同,它全面通過為每一對象指定引用計數來確定其生命週期。當某個對象的引用計數被減到0時,會觸發調用該對象的dealloc成員方法。而上述的init方法就已經把對象的引用計數設定為1了。當我們調用NSObject的release成員方法時,該對象的引用計數減1。當我們調用NSObject的retain成員方法時,該對象的引用計數加1。通常,我們不要自己去重寫NSObject的release與retain成員方法

Objective-C關於非ARC模式下的對象引用計數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.