亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > ios中什么是實(shí)例方法

      ios中什么是實(shí)例方法

      時(shí)間: 歐東艷656 分享

      ios中什么是實(shí)例方法

        1:實(shí)例方法是— 類開頭是+ 實(shí)例方法是用實(shí)例對(duì)象訪問(wèn),類方法的對(duì)象是類而不是實(shí)例,通常創(chuàng)建對(duì)象或者工具類。

        在實(shí)例方法里,根據(jù)繼承原理發(fā)送消息給self和super其實(shí)都是發(fā)送給self

        在類方法里面self是其他的類的類方法,在類方法中給self發(fā)送消息只能發(fā)類方法self是類super也是

        什么時(shí)候用類方法,要?jiǎng)?chuàng)建一個(gè)實(shí)例時(shí)候獲取一個(gè)共享實(shí)例,或者獲取關(guān)于類的一些共有信息

        1,實(shí)例方法里面的self,是對(duì)象的首地址。

        2,類方法里面的self,是Class.

        盡管在同一個(gè)類里面的使用self,但是self卻有著不同的解讀。在類方法里面的self,可以翻譯成class self;在實(shí)例方法里面的self,應(yīng)該被翻譯成為object self。在類方法里面的self和實(shí)例方法里面的self有著本質(zhì)上的不同,盡管他們的名字都叫self。

        Object-C中的私有方法和私有成員變量

        成員變量默認(rèn)對(duì)內(nèi)是共有的,對(duì)外是私有的。

        @interface Controller : NSObject

        {

        @private: NSString *something;

        }

        + (void)thisIsAStaticMethod;

        - (void)thisIsAnInstanceMethod;

        @end

        @interface Controller (Private)

        - (void)thisIsAPrivateMethod;

        @end

        下面的代碼就是怎樣獲取私有變量(記得加頭文件#import ):

        NSString *str;

        Mobj *obj = [[Mobj alloc] init];

        object_getInstanceVariable(obj, "mt_", (void *)&str);

        NSLog(@"%@",str);

        [obj release];

        //

        IOS實(shí)例方法和類方法的區(qū)別

        類方法和實(shí)例方法

        1:實(shí)例方法是— 類開頭是+ 實(shí)例方法是用實(shí)例對(duì)象訪問(wèn),類方法的對(duì)象是類而不是實(shí)例,通常創(chuàng)建對(duì)象或者工具類。

        在實(shí)例方法里,根據(jù)繼承原理發(fā)送消息給self和super其實(shí)都是發(fā)送給self

        在類方法里面self是其他的類的類方法,在類方法中給self發(fā)送消息只能發(fā)類方法self是類super也是

        什么時(shí)候用類方法,要?jiǎng)?chuàng)建一個(gè)實(shí)例時(shí)候獲取一個(gè)共享實(shí)例,或者獲取關(guān)于類的一些共有信息

        2:類方法(class method)和實(shí)例方法(instance method)。類方法被限定在類范圍內(nèi),不能被類的實(shí)例調(diào)用(即脫離實(shí)例運(yùn)行)。alloc就是一種類方法。實(shí)例方法限定在對(duì)象實(shí)例的范圍內(nèi)(即實(shí)例化之前不能運(yùn)行)。init就是一種實(shí)例方法,被alloc方法返回的對(duì)象實(shí)例調(diào)用。

      NSObject* object1 = [[NSObjectalloc] init];

        instance method 以減號(hào) "-" 開頭

        class method 以加號(hào) “+” 開頭,相當(dāng)于static方法

        3:see see 更健康

        Objective-C

        1.OC是一門基于C的面向?qū)ο笳Z(yǔ)言,是C語(yǔ)言的一個(gè)超集,同時(shí)具有C語(yǔ)言的特征

        2.OC對(duì)類的定義和實(shí)現(xiàn)以及初始化

        //聲明類接口,繼承NSObject對(duì)象(該對(duì)象是OC中所有類的頂級(jí)父類,所有類都繼承于它)

        @interface ClassName :NSObject

        //成員屬性和成員函數(shù)的聲明

        +(void)function;//類方法,不需要實(shí)例化對(duì)象就可以調(diào)用的方法

        - (void)function2 :(NSString *)arg;//成員方法,必須通過(guò)實(shí)例化的對(duì)象調(diào)用

        @end

        //實(shí)現(xiàn)類

        @imlementation ClassName

        //成員屬性初始化和方法的定義

        @end

        對(duì)象的初始化:ClassName *obj = [[ClassName alloc] init]

        OC中以消息機(jī)制傳遞信息,發(fā)送alloc消息給類分配內(nèi)存空間,發(fā)送init消息生成對(duì)象,指針指向?qū)ο蟊旧怼?/p>

        3.類方法的調(diào)用

        [obj function];

        NSString *str = [NSString stringWithString:@"hello"];

        [obj function2 : str];

        4.輸出函數(shù)

        根據(jù)不同的輸出格式輸出不同的值 (%d :整形 ,%@:對(duì)象<發(fā)送description消息>,%s:字符串)

        NSlog(@“The result is %d”,intNum);

        CF代表Core Foundation (Cocoa)

        CFShow發(fā)送description給它顯示的對(duì)象,CFShow打印的信息不會(huì)顯示時(shí)間戳,NSLog會(huì)顯示,同時(shí)CFShow不需要格式字符 串,它只能用于對(duì)象

        CFShow(obj);

        5.屬性

        支持點(diǎn)表示法:myTableViewCell.textLabel.text = @"hello" 等價(jià)于 [[myTableViewCell textLabel] setText:@"hello"];

        使用屬性生成器 property

        在h文件中聲明: @property int year

        在m文件中合成生成器:@synthesize year

        使用 obj.year = 1999 相當(dāng)于調(diào)用了 [obj setYear:1999];

        可以自定義取值方法和賦值方法(getter and setter)

        -(int)year

        {

        return year;

        }

        - (void) setYear : (int) newYear

        {

        //此處添加了一些基本的內(nèi)存管理方法,保留新的值,釋放以前的值

        if(newYear != year)

        {

        [year release];

        year = [newYear retain];

        }

        }

        也可以繞過(guò)oc的命名約定,自己指定getter和setter方法的名稱;

        @property(getter = isExist,setter = setExist:) BOOL exist;

        @synthesize exist;

        使用過(guò)程中既可以使用新定義的方法名,也可以使用以前的方法(點(diǎn)表示法)

        屬性的特性:readwrite readonly assign retain copy nonatomic

        assign:默認(rèn)行為,使用@property int year就使用了assign行為,就是給實(shí)例變量賦了一個(gè)值

        retain:實(shí)現(xiàn)了兩個(gè)功能,一個(gè)是保留了賦值時(shí)傳遞的對(duì)象,其次是賦值前釋放了以前值,使用retain可以實(shí)現(xiàn)上面討論的內(nèi)存管理的優(yōu)點(diǎn),使用時(shí)加上 @property (retain)int year;

        copy:發(fā)送一條復(fù)制的消息給被傳遞的對(duì)象,保留它,并釋放任何以前的值;

        nonactomic:非原子訪問(wèn)器,加上后可以提升訪問(wèn)速度,但當(dāng)兩個(gè)線程同時(shí)修改同一個(gè)屬性時(shí)就會(huì)出現(xiàn)問(wèn)題,原子屬性可以保證屬性在被一個(gè)線程使用時(shí)不被另一個(gè)線程訪問(wèn),不存在atomic關(guān)鍵字,默認(rèn)情況下,所有方法都是自動(dòng)合成的。(類似與java中的線程鎖機(jī)制synchronized)

        readwrite:可讀寫

        readonly:只讀

      245545