對象Object介紹:1-創(chuàng)建對象

對象是類Class運(yùn)行時(shí)的實(shí)例,它包含了自己的實(shí)例變量(屬性中聲明)的內(nèi)存副本以及類方法的指針,在實(shí)際開發(fā)中可以采用內(nèi)存地址分配以及初始化兩個(gè)步驟來創(chuàng)建一個(gè)對象。

對象的創(chuàng)建分為兩個(gè)階段:內(nèi)存空間分配和初始化。初始化總是緊跟在內(nèi)存空間分配之后進(jìn)行的,但是在創(chuàng)建對象的過程中,這兩個(gè)操作的作用是不同的。

1、分配內(nèi)存空間alloc

在為一個(gè)對象分配內(nèi)存空間時(shí),需要調(diào)用alloc(或者allocWithZone:)方法。

除了為對象在程序的內(nèi)存區(qū)劃定一塊合適大小的內(nèi)存空間之外,alloc方法還有如下的幾個(gè)重要作用:

將對象的retain count設(shè)置為1;

使初始化對象的isa實(shí)例變量指向?qū)ο蟮念悾渲?,對象類是一個(gè)根據(jù)類定義編譯得到的運(yùn)行對象。另外,每一個(gè)對象都有一個(gè)isa變量標(biāo)示它是哪個(gè)類的實(shí)例;

將其他類中定義的實(shí)例變量的值初始化為0或者nil。

2、初始化init

初始化的過程將對象的實(shí)例變量設(shè)置為合理且有用的初始值,還可以分配和準(zhǔn)備對象需要的其他全局資源,并在必要時(shí)裝在諸如文件這樣的資源。

初始化方法一般都以init開頭,可以設(shè)置多個(gè)初始化的方法,例如, NSString類,提供了如下初始化方法:

-(instancetype)init NS_DESIGNATED_INITIALIZER;

-(nullable instancetype)initWithCoder:(NSCoder*)aDecoder NS_DESIGNATED_INITIALIZER;

-(instancetype)initWithCharacters:(constunichar*)characters length:(NSUInteger)length;

-(nullable instancetype)initWithUTF8String:(constchar*)nullTerminatedCString;

-(instancetype)initWithString:(NSString*)aString;

-(instancetype)initWithFormat:(NSString*)format,...NS_FORMAT_FUNCTION(1,2);

-(instancetype)initWithFormat:(NSString*)format locale:(nullable id)locale,...NS_FORMAT_FUNCTION(1,3);

-(instancetype)initWithFormat:(NSString*)format locale:(nullable id)locale arguments:(va_list)argList NS_FORMAT_FUNCTION(1,0);

-(nullable instancetype)initWithData:(NSData*)data encoding:(NSStringEncoding)encoding;

-(nullable instancetype)initWithBytes:(constvoid*)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding;

以init方法為例,在對象調(diào)用init方法時(shí),主要完成了如下的工作:

調(diào)用父類的初始化方法[super init];

如果父類返回的對象不為空,則可以對對象進(jìn)行進(jìn)一步的設(shè)置;例如,在一個(gè)自定義UIView類中,可以設(shè)置該類的backgroundColor屬性;

如果父類返回的對象為nil,則直接返回nil。

-(instancetype)init

{

self=[superinit];

if(self){

//添加自定義聲明

}

returnself;

}

3、類方法

類方法是方法前面為+號的方法,類方法把創(chuàng)建對象過程的兩個(gè)步驟(內(nèi)存空間分配+初始化)合并,直接返回被創(chuàng)建的對象。在實(shí)際開發(fā)過程中,類方法的使用非常普遍,例如,NSString類也提供了如下一些類方法:

+(instancetype)string;

+(instancetype)stringWithString:(NSString*)string;

+(instancetype)stringWithCharacters:(constunichar*)characters length:(NSUInteger)length;

+(nullable instancetype)stringWithUTF8String:(constchar*)nullTerminatedCString;

+(instancetype)stringWithFormat:(NSString*)format,...NS_FORMAT_FUNCTION(1,2);

+(instancetype)localizedStringWithFormat:(NSString*)format,...NS_FORMAT_FUNCTION(1,2);

示例代碼:分別使用類方法和普通方法創(chuàng)建對象

intmain(intargc,constchar*argv[]){

@autoreleasepool{

//使用類方法創(chuàng)建字符串對象

NSString*str=[NSStringstringWithFormat:@"www.hcios.com"];

//使用alloc + init方法創(chuàng)建字符串對象

NSString*str2=[[NSStringalloc]initWithString:@"宏創(chuàng)學(xué)院"];

NSLog(@"%@, %@",str,str2);

}

return0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容