1.分配物件
分配(allcoation)是乙個新物件誕生的過程。向某個類傳送alloc訊息,就能為類分配一塊足夠大的記憶體,以存放該類的全部例項變數。同時alloc方法還順便將這塊記憶體區域全部初始化為0。objective-c將分配和初始化拆分為兩個明確的步驟:來自nsobject的類方法alloc為物件分配一塊記憶體區域並將其清零,例項方法init用於獲得的乙個物件並使其執行。
1.1編寫初始化函式
if(self = [super init])
[super init]作用是讓超類完成其自身的初始化工作。對於繼承類nsobject的類來說,呼叫超類的init方法可以讓nsobject執行它所需的所有操作,以便物件能夠響應訊息並處理保留計數器。而對於從其他類繼承的類,通過這種方法可以實現自身的全新初始化。
1.2便利初始化函式
有些物件擁有多個以init開頭的方法名。需要記住,這些init方法實際上沒什麼特別的,只是遵循命名約定的普通方法。
許多類包含便利初始化函式(convenience initializer),它們是用來完成某些額外工作的初始化方法,可以減輕負擔。
- (id) init;
這一基本方法初始化乙個新的空字串。對於不可變的nsstring類來說,這個方法沒有多大的用處。不過,可以分配和初始化乙個新的nsmtutablestring類的物件並開始向該類中新增字元。可以像下面這樣使用此物件:
nsstring *emptystring = [[nsstring alloc] init];
上面的**返回乙個空字串。
- (id) initwithformat:(nsstring *) format,...;
正如我們使用nslog()函式和類方法stringwithformat:接收格式化的字串並輸出格式化的結果一樣,這個版本的**初始化了乙個新的字串作為格式化的結果。使用此初始化方法的例子如下:
string = [[nsstring alloc] initwithformat:@"%d or %d",25,625];
上面的**返回乙個字串,其值為「25」或「624」。
- (id) initwithcontentsoffile:(nsstring *) path encoding:(nsstringencoding) enc error:(nserror **) error
這個initwithcontentsoffile:encoding:error:方法用來開啟指定路徑上的文字檔案,讀取檔案內容,並使用檔案內容初始化乙個字串。讀取檔案/tmp/words.txt的**如下:
nserror *error = nil;
nsstring *string = [[nsstring alloc] initwithcontentsoffile:@"/tmp/words.txt"
encoding:nsutf8stringeencoding
error:&error];
encoding引數將檔案內容的型別告訴了api。一般來說,應該使用nsutf8stringencoding,它表示檔案內容是utf8格式進行編碼的。
第三個引數會在初始化沒有發生錯誤時返回nil。如果出現了錯誤,可以使用localizeddescription方法來查明情況。**放進去如下所示:
nserror *error = nil;
nsstringencoding encoding = nsut8stringencoding;
nsstring *string = [[nsstring alloc ]initwithcotentsoffile:@"/tmp/words.txt"
usedencoding:&encoding
error:&error];
if(nil ! = error)
20140111 物件初始化過程
c 物件初始化 1.先變數後建構函式。變數先被初始化,然後建構函式被執行 2.先靜態化後例項化。當乙個類被訪問時,靜態變數和建構函式最先被初始化.接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式,派生物件在基物件之前被初始化.比如c類派生自b類,b類派生自a類,那...
類和物件 3 物件初始化列表
物件初始化列表出現原因 1.必須這樣做 如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。2 類成員中若有const...
C 3 0 物件初始化設定
原文連線 有類如下 public class document public string content c 2.0 為 document 物件的屬性賦值,可能通過如下的方式 document doc new document doc.title 標題 doc.content 內容 用了三行 能不...