成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Cocoa基本原理指南之對象創建教程

移動開發 iOS
Cocoa會從應用程序的虛存區中為對象分配足夠的內存。在計算需要分配多少內存時,Cocoa會考慮對象的實例變量,包括它們的類型和順序,這些信息由對象的類來定義。

Cocoa基本原理指南中對象創建的內容是本文要介紹的內容,Cocoa對象的創建總是分成兩個階段:對象分配和初始化。Cocoa會從應用程序的虛存區中為對象分配足夠的內存。在計算需要分配多少內存時,Cocoa會考慮對象的實例變量,包括它們的類型和順序,這些信息由對象的類來定義。為了進行對象分配,您需要向對象的類發送alloc或allocWithZone:消息。

在消息的返回值中可以得到一個“生的”(未初始化的)類實例。alloc方法使用應用程序缺省的虛存區。區是一個按頁對齊的內存區域,用于存放應用程序分配的對象和數據。

除了分配內存之外,Cocoa的分配(allocation)消息還進行其它一些重要的工作:

  1. <!--[if !supportLists]-->§  <!--[endif]-->將對象的保持數設置為1。  
  2. <!--[if !supportLists]-->§  <!--[endif]-->使初始化對象的isa實例變量指向對象的類。對象類是一個根據類定義編譯得到的運行時對象。  
  3. <!--[if !supportLists]-->§  <!--[endif]-->將其它所有的實例變量初始化為0(或者與0等價的類型,比如nil、NULL、和0.0)。 

對象的isa實例變量是從NSObject繼承下來的,因此所有的Cocoa對象都有。在將isa指針指向對象類之后,對象就被集成到繼承層次的運行時視圖和構成程序的對象(類和實例)網絡中了。其結果是對象可以找到它所需要的所有運行時信息,比如其它對象在繼承層次上的位置,它們遵循的協議,以及在響應消息時可以執行的方法實現的位置。

初始化過程將對象的實例變量設置為合理而有用的初始值,還可以分配和準備對象需要的其它全局資源,并在必要時裝載諸如文件這樣的資源。聲明實例變量的所有對象都應該實現一個初始化方法-除非將所有變量都置為0的缺省初始化已經足夠。如果一個對象沒有實現自己的初始化方法,Cocoa就會調用其最近的祖先對象的方法。

NSObject聲明了init方法作為初始化方法的原型,它是一個實例方法,返回一個類型為id的對象。對于不需要初始化其它數據的子類,重載init方法就可以了,但是常見的情況是初始化階段需要根據外部的數據來設置對象的初始狀態。唯一的要求是初始化方法必須以“init”字母開頭(有時用格式規則描述init...來表示初始化方法)。從初始化方法返回nil表示不能創建被請求的對象。在創建對象時,通常應該在處理之前檢查返回值是否為nil。一旦對象被初始化了,就不應該再進行初始化。如果您試圖進行重復初始化,實例化對象的框架類通常會產生一個例外。

實現一個init... 方法,使之作為類的唯一初始化方法或者具有多個初始化方法的類的指定初始化方法時(參見"多個初始化方法和指定初始化方法"部分的描述),有如下幾個關鍵步驟:

  1. <!--[if !supportLists]-->§  <!--[endif]-->總是首先調用超類(super)的初始化方法。  
  2. <!--[if !supportLists]-->§  <!--[endif]-->檢查超類返回的對象。如果是nil,則初始化不能進行,需要向接收者對象返回nil。  
  3. <!--[if !supportLists]-->§  <!--[endif]-->在初始化實例變量時,如果它們是其它對象的引用,則在必要時進行保留和拷貝。  
  4. <!--[if !supportLists]-->§  <!--[endif]-->將實例變量設置為正當的初始值之后,就返回self,除了下列的情況:  
  5. <!--[if !supportLists]-->§  <!--[endif]-->需要返回一個代替對象,在這種情況下,首先釋放新分配的對象。  
  6. <!--[if !supportLists]-->§  <!--[endif]-->某些問題導致不能成功初始化,這時需要返回nil。 

在很多方面,一個類的dealloc方法都是和init... 方法(特別是指定初始化方法)相呼應的。初始化方法在對象分配之后馬上被調用,而dealloc在對象的銷毀之前被調用;初始化方法確保對象的實例變量被正確初始化,而dealloc方法確保該對象的實例變量被釋放,以及確保動態分配的內存被釋放。

兩者的***一點相似之處在于必須調用各自的超類實現。在初始化方法中,首先調用超類的指定初始化方法;在dealloc方法中,則在***一步調用超類的dealloc實現。這樣做的原因是與初始化方法相反,子類應該在祖先類的實例變量被釋放之前釋放自己擁有的實例變量。

類工廠方法的實現是為了向客戶提供方便,它們將分配和初始化合在一個步驟中,返回被創建的對象,并進行自動釋放處理。這些方法的形式是+ (type)className...(其中className不包括任何前綴)。

小結:Cocoa基本原理指南之對象創建教程的內容介紹完了,希望通過本文的學習對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-07 14:22:27

Cocoa 對象 生命周期

2011-07-07 14:10:21

Cocoa 內省 hash

2011-07-07 13:30:32

Cocoa Core

2011-07-07 14:46:10

Cocoa Xcode

2012-01-12 14:37:34

jQuery

2009-02-24 09:43:00

IP電話原理

2011-11-29 12:17:00

2020-10-14 06:23:54

SpringBean實例化

2019-11-28 10:45:28

ZooKeeper源碼分布式

2016-08-18 00:04:09

網絡爬蟲抓取系統服務器

2010-08-20 13:29:33

OFDM

2013-04-07 14:09:55

Android應用基本

2020-03-21 14:57:14

手機定位智能手機APP

2016-08-17 23:53:29

網絡爬蟲抓取系統

2021-02-08 21:40:04

SockmapBPF存儲

2009-06-11 09:56:09

MySQL Repli原理

2020-12-29 16:55:44

ZooKeeper運維數據結構

2010-03-17 13:35:02

2010-03-18 20:13:03

Java socket

2013-04-11 13:57:27

Objective-CiOS開發內存管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产网 | 国产一区精品在线 | 精品国产一区二区三区日日嗨 | 欧美日韩精品中文字幕 | 国产一区二区在线免费观看 | 精品国产免费一区二区三区演员表 | 视频一区二区三区在线观看 | 一区二区三区中文字幕 | 亚洲精品久久久9婷婷中文字幕 | 亚洲国产精品久久久久 | 欧美精品乱码久久久久久按摩 | 中文精品久久 | 色在线看 | 国产激情视频在线 | 欧美精品中文字幕久久二区 | 欧美日韩一区在线 | 人人澡人人射 | 精品成人一区二区 | 国产福利在线播放麻豆 | 日韩欧美国产精品一区二区 | 免费黄视频网站 | av网站免费在线观看 | 欧美高清视频在线观看 | 在线看av网址 | 国产一级淫片免费视频 | 国产精品99视频 | 亚洲精品视频免费观看 | 中文字幕在线免费视频 | 亚洲午夜精品视频 | 丁香五月网久久综合 | 精品国产一区二区三区性色av | 成人在线视频免费观看 | 成人免费三级电影 | 狠狠干狠狠操 | 伊人久久大香线 | 大吊一区二区 | 国产精品视频播放 | 黄色免费在线网址 | 中文字幕日韩一区 | 国产男女精品 | 国产激情视频网站 |