国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學習啦 > 知識大全 > 知識百科 > 百科知識 > ios中什么是實例方法

    ios中什么是實例方法

    時間: 歐東艷656 分享

    ios中什么是實例方法

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

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

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

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

      1,實例方法里面的self,是對象的首地址。

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

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

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

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

      @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實例方法和類方法的區(qū)別

      類方法和實例方法

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

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

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

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

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

    NSObject* object1 = [[NSObjectalloc] init];

      instance method 以減號 "-" 開頭

      class method 以加號 “+” 開頭,相當于static方法

      3:see see 更健康

      Objective-C

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

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

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

      @interface ClassName :NSObject

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

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

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

      @end

      //實現(xiàn)類

      @imlementation ClassName

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

      @end

      對象的初始化:ClassName *obj = [[ClassName alloc] init]

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

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

      [obj function];

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

      [obj function2 : str];

      4.輸出函數(shù)

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

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

      CF代表Core Foundation (Cocoa)

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

      CFShow(obj);

      5.屬性

      支持點表示法:myTableViewCell.textLabel.text = @"hello" 等價于 [[myTableViewCell textLabel] setText:@"hello"];

      使用屬性生成器 property

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

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

      使用 obj.year = 1999 相當于調(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];

      }

      }

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

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

      @synthesize exist;

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

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

      assign:默認行為,使用@property int year就使用了assign行為,就是給實例變量賦了一個值

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

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

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

      readwrite:可讀寫

      readonly:只讀

    245545