iOS開發(fā):類的'生命周期'
光有新學(xué)IOS的朋友問(wèn)我為什么要 [[*** alloc]init],今天就專門來(lái)說(shuō)一下一個(gè)類的“生命周期”~~~.
要使用某個(gè)類的對(duì)象呢,當(dāng)然首先必須先得到一個(gè)指向該對(duì)象的變量。
例如:
Class *classInstance;
在oc中,這個(gè)變量的變量名就是classInstance了,類型就是指針,指向某個(gè)Class類的實(shí)例。
但是,這只是聲明的代碼,而不是創(chuàng)建了Class實(shí)例。
一個(gè)對(duì)象的生命周期是從創(chuàng)建開始,然后接受消息,最后在不需要的時(shí)候唄釋放掉。
而怎么創(chuàng)建對(duì)象呢? 我們通過(guò)向類發(fā)送alloc消息,就可以創(chuàng)建對(duì)象了。一個(gè)類收到了alloc消息后,就會(huì)在內(nèi)存中創(chuàng)建對(duì)象,并且返回一個(gè)指向新對(duì)象的指針,我們可以把指針保存在某個(gè)變量里。
例如:
Class *classInstance = [Class alloc];
這樣就創(chuàng)建了一個(gè)Class類的實(shí)例,并且將返回的對(duì)象指針賦給了classInstance變量。這樣我們就得到一個(gè)指向某個(gè)實(shí)例的指針,就能向它發(fā)送消息了。
但是,這樣我們就能使用了嗎?當(dāng)然不是了。雖然向類發(fā)送alloc消息能夠創(chuàng)建實(shí)例,但是在沒有完成初始化之前,新創(chuàng)建的實(shí)例是無(wú)效的。所以對(duì)新創(chuàng)建的實(shí)例,必須先向它發(fā)送一個(gè)初始化消息。
即:
[classInstance init];
而init返回的也是指針,和alloc消息一樣,都指向新創(chuàng)建的對(duì)象,所以我們可以嵌套消息發(fā)送,先讓其收到alloc消息創(chuàng)建對(duì)象,然后再收到init消息完成初始化。
即:
Class *classInstance [[Class alloc] init];
正如開頭所說(shuō)的,完成了一個(gè)類的創(chuàng)建。
而釋放對(duì)象代碼就比較簡(jiǎn)單了,(實(shí)際很復(fù)雜,著就不多說(shuō)了 - -)
classInstance = nil ;
nil是值為0的指針,即java中的null,C里的NULL。一般表示不指向任何對(duì)象。
好吧,今天簡(jiǎn)單的稍微說(shuō)到這里。