iOS程式設計 學習篇(五)

2021-07-03 15:51:34 字數 1321 閱讀 2375

當程式執行某個某方法時,會從記憶體中名為棧(stack)的區域分配一塊記憶體空間,這塊空間成為幀(frame)。幀負責儲存程式在方法內宣告的變數的值。

堆(heap)是指記憶體中的另一塊區域,和棧是分開的。堆包含了大量無序的活動物件,需要通過指標來儲存這些物件在堆中的位址。

當應用向某個類傳送alloc訊息時,系統會從堆中分配出一塊記憶體,其大小足夠存放相應物件的全部例項變數。ios應用在啟動和執行時會持續建立需要的物件,如果堆的空間無限,則可以隨意建立所需的物件,並且在應用執行時間不用釋放。但是可**用支票的堆空間是有限的。因此再需要某些物件時,就要將其釋放掉。

指標變數暗含了對其所指向的物件的所有權。

物件所有權概念可以幫助我們決定是否應該釋放某個物件並**該物件占有的記憶體。

因為物件可以擁有其他物件,後者也可以再擁有別的物件,所以釋放乙個物件可能會產生連鎖反應,導致多個物件失去擁有者,進而釋放物件並歸還記憶體。

只要指標指向了某個物件,那麼相應的物件就會多乙個擁有者,並且不會被程式釋放。這種指標特性稱為強引用(strong reference)

程式也可以選擇讓指標變數不影響其指向物件的擁有者個數。這種不會改變物件擁有者個數的指標特性稱為弱引用(weak reference)

強引用迴圈(strong reference cycle 或 保留迴圈):當兩個或兩個以上的物件相互之間有強引用特性的指標關聯時,就會產生強引用迴圈。

將強引用迴圈解除前,需要將新建立的兩個物件之間某個指標改為弱引用特性。在決定將哪個指標改為弱引用前,可以先為存在強引用迴圈問題的多個物件決定相應的父子關係。確定父子關係後,就可以讓父物件擁有子物件,並確保不會擁有負物件。

通常情況下,父物件應該使用工具有強引用特性的指標,指向子物件。而子物件則應該使用具有弱引用特性的指標,指回父物件。如果某個子物件需要有乙個指標,指向父物件的父物件,那麼該指標必須具有弱引用特性。

通過屬性也可以為類宣告例項變數並實現相應的訪問方法。

宣告乙個屬性,等於隱含地為相應名稱的例項變數宣告一對訪問方法。

屬性的名字是例項變數的名字去掉下劃線,編譯器根據屬性生成例項變數時會自動在變數名加上下劃線。宣告屬性還可以為相應的訪問方法生成**。

任何屬性都可以有一組特性(attribute),用於描述相應訪問方法的行為。

在xcode4.5及以後的版本中,可以省略@synthesize ,編譯器會自動幫你加上getter 和 setter 方法的實現,並且缺省會去訪問_age這個成員變數,如果找不到_age這個成員變數,會自動生成乙個叫做 _age的私有成員變數。

iOS程式設計 學習篇(三)

相比之前通過傳送訊息來訪問例項變數,oc提供了更加方便的機制 點語法。語法格式 訊息接受者後面加上乙個 在加上例項變數的名字。如果點語法用在複製號左邊,就表示存方法,用在右邊則代表方法。objective c中的方法分為例項方法和類方法兩種。類方法 class method 的作用通常是建立物件,或...

iOS程式設計 學習篇(四)

從語法上看,類方法的宣告和例項方法的宣告不同,差別在於第乙個字元。在返回型別的前面,例項方法使用的是字元 而類方法使用的是字元 tips 標頭檔案宣告順序 例項變數宣告應該寫在最前面,然後是類檔案,接下來是初始化方法,最後是其他方法。這種排序是一種約定。instancetype randomitem...

iOS開發 動畫程式設計OC篇 (五)動畫組

一 組動畫簡單說明 caanimation的子類,可以儲存一組動畫物件,將caanimationgroup物件加入層後,組中所有動畫物件可以同時併發執行 屬性解析 animations 用來儲存一組動畫物件的nsarray 預設情況下,一組動畫物件是同時執行的,也可以通過設定動畫物件的beginti...