你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 懂得Objective-C的變量和面絕對象的繼續特征

懂得Objective-C的變量和面絕對象的繼續特征

編輯:IOS開發綜合

OC點語法和變量感化域

1、點語法

(一)熟悉點語法

聲明一個Person類:

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;//默許為@protected
}

- (void)setAge:(int)age;
- (int)age;

@end

Person類的完成:

#import "Person.h"

@implementation Person

- (void)setAge:(int)age
{
    _age = age;// 不克不及寫成self.age = newAge,相當與 [self setAge:newAge];
}

- (int)age  //get辦法
{
    return _age;
}

@end

點語法的應用:

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
       
        // insert code here...
        Person *person = [[Person alloc] init];
       
        //[person setAge:10];
        person.age = 10;//點語法,等效與[person setAge:10];
//這裡其實不是給person的屬性賦值,而是挪用person的setAge辦法
       
        //int age = [person age];
        int age = person.age;//等效與int age = [person age]
       NSLog(@"age is %i", age);
        [person release];
       
    }
    return 0;
}

(二)點語法的感化

OC設計點語法的目標,是為了讓其他說話的開辟者可以很快的上手OC說話開辟,應用點語法,讓它和其他面向對象的說話如java很像。

(三)點語法的實質

點語法的實質是辦法的挪用,而不是拜訪成員變量,當應用點語法時,編譯器會主動睜開成響應的辦法。切記點語法的實質是轉換成響應的set和get辦法,假如沒有set和get辦法,則不克不及應用點語法。

如:

Stu.age=10;睜開為:[stu setAge:10];

int  a=stu.age;睜開為:[stu age];

編譯器若何曉得是set辦法照樣get辦法?重要是看賦值(可使用斷點調試來檢查)。

在OC中拜訪成員變量只要一種方法即便用-> 如stu->age,這類情形請求在@public的條件下。

(四)點語法的應用留意

上面的應用方法是一個逝世輪回:

   (1)在set辦法中,self.age=age;相當因而[self setAge:age];

(2)在get辦法中,return self.age;相當因而[self age];

2、變量感化域

(一)變量的感化域重要分為四種:

(1)@public (地下的)在有對象的條件下,任何處所都可以直接拜訪。

(2)@protected (受掩護的)只能在以後類和子類的對象辦法中拜訪

(3)@private (公有的)只能在以後類的對象辦法中能力直接拜訪

(4)@package (框架級其余)感化域介於公有和地下之間,只需處於統一個框架中便可以直接經由過程變量名拜訪

(二)應用留意和彌補

(1)在類的完成即.m文件中也能夠聲明成員變量,然則由於在其他文件中平日都只是包括頭文件而不會包括完成文件,所以在這裡聲明的成員變量是@private的。在.m中界說的成員變量不克不及喝它的頭文件.h中的成員變量同名,在這時代應用@public等症結字也是白費的。

(2)在@interface  @end之間聲明的成員變量假如不做特殊的解釋,那末其默許是protected的。

(3)一個類繼續了另外一個類,那末就具有了父類的一切成員變量和辦法,留意一切的成員變量它都具有,只是有的它不克不及直接拜訪。


OC面向對象—繼續
1、根本概念

法式的世界和人類的“對象”世界在思惟上是沒有設麼差別的,富二代繼續了怙恃,天然就具有了怙恃具有的一切資本,子類繼續了父類異樣就具有了父類一切的辦法和屬性(成員變量)。

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615465132.png (601×285)

在這裡植物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。

繼續的利益:

(1)抽掏出了反復的代碼

(2)樹立了類和類之間的接洽

繼續的缺陷:

耦合性太強

 

2、OC中的繼續

@interface Animal:NSObject

//植物裡繼續了NSObject,取得NSObject類的辦法;

@end

 

@interface Dog :Animal

//dog類繼續Animal類

@end

留意:OC說話是單繼續說話。在oc說話中,根本上一切類的根類都是NSObject類。

 

3、繼續的應用留意

(1)編譯器從上往下履行,所以在子類後面至多應當要有父類的聲明;

(2)OC中不許可子類和父類具有雷同稱號的成員變量名;

(3)OC中的子類可以具有和父類雷同稱號的辦法,在子類挪用時,優先去本身的外部尋覓,假如沒有則一層一層的往上找;

提醒:重寫即子類從新完成了父類中的某個辦法,籠罩了父類之前的完成。

表示圖:一共有三個類,Person類繼續了NSObject類,Student類繼續了Person類。

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615465160.png (751×337)

創立一個Student *s=[[Student alloc] init];

此時會把Student類和這個類的父類加載進內存。

提醒:每一個類中都有一個super class指針,該指針指向本身的父類。對象中有一個isa指針,該指針指向挪用該對象的類。

 

4、繼續和組合

繼續的實用場所:

(1)當兩個類具有雷同的屬性和辦法時,便可以將雷同的屬性和辦法抽取到一個父類中。

(2)當A類完整具有B類中的部門屬性和辦法時,可以斟酌讓B類繼續A類(斟酌),在這類情形下,也能夠斟酌應用組合。

繼續:###是xxx,如狗是植物,可讓狗繼續植物類

組合:###具有xxx,如先生有書,可讓書這個類作為先生類的屬性

 

5、症結字super

Super症結字,在子類中重寫辦法時,可讓挪用者跳過這一層而挪用父類中的辦法。

感化:

(1)直接挪用父類中的某一個辦法

(2)Super處在對象辦法中,那末就會挪用父類的對象辦法;super處於類辦法中,那末就會挪用父類的類辦法。

應用場景:子類在重寫父類辦法時,想要保存父類的一些行動。

【懂得Objective-C的變量和面絕對象的繼續特征】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved