一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 理解Objective-C的變量以及面相對象的繼承特性

理解Objective-C的變量以及面相對象的繼承特性

2021-01-03 16:48文頂頂 IOS

這篇文章主要介紹了理解Objective-C的變量以及面相對象的繼承特性,文中的所說的點語法即是'對象名.成員變量名'這種對變量的訪問,需要的朋友可以參考下

oc點語法和變量作用域

一、點語法

(一)認識點語法

聲明一個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];

二、變量作用域

(一)變量的作用域主要分為四種:

(1)@public (公開的)在有對象的前提下,任何地方都可以直接訪問。

(2)@protected (受保護的)只能在當前類和子類的對象方法中訪問

(3)@private (私有的)只能在當前類的對象方法中才能直接訪問

(4)@package (框架級別的)作用域介于私有和公開之間,只要處于同一個框架中就可以直接通過變量名訪問

(二)使用注意和補充

(1)在類的實現即.m文件中也可以聲明成員變量,但是因為在其他文件中通常都只是包含頭文件而不會包含實現文件,所以在這里聲明的成員變量是@private的。在.m中定義的成員變量不能喝它的頭文件.h中的成員變量同名,在這期間使用@public等關鍵字也是徒勞的。

(2)在@interface  @end之間聲明的成員變量如果不做特別的說明,那么其默認是protected的。

(3)一個類繼承了另一個類,那么就擁有了父類的所有成員變量和方法,注意所有的成員變量它都擁有,只是有的它不能直接訪問。


oc面向對象—繼承
一、基本概念

程序的世界和人類的“對象”世界在思想上是沒有設么區別的,富二代繼承了父母,自然就擁有了父母擁有的所有資源,子類繼承了父類同樣就擁有了父類所有的方法和屬性(成員變量)。

理解Objective-C的變量以及面相對象的繼承特性

在這里動物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。

繼承的好處:

(1)抽取出了重復的代碼

(2)建立了類和類之間的聯系

繼承的缺點:

耦合性太強

 

二、oc中的繼承

復制代碼 代碼如下:


@interface animal:nsobject

 

//動物里繼承了nsobject,獲得nsobject類的方法;

@end


 

復制代碼 代碼如下:


@interface dog :animal

 

//dog類繼承animal類

@end


注意:oc語言是單繼承語言。在oc語言中,基本上所有類的根類都是nsobject類。

 

 

三、繼承的使用注意

(1)編譯器從上往下執行,所以在子類前面至少應該要有父類的聲明;

(2)oc中不允許子類和父類擁有相同名稱的成員變量名;

(3)oc中的子類可以擁有和父類相同名稱的方法,在子類調用時,優先去自己的內部尋找,如果沒有則一層一層的往上找;

提示:重寫即子類重新實現了父類中的某個方法,覆蓋了父類以前的實現。

示意圖:一共有三個類,person類繼承了nsobject類,student類繼承了person類。

理解Objective-C的變量以及面相對象的繼承特性

創建一個student *s=[[student alloc] init];

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

提示:每個類中都有一個super class指針,該指針指向自己的父類。對象中有一個isa指針,該指針指向調用該對象的類。

 

四、繼承和組合

繼承的適用場合:

(1)當兩個類擁有相同的屬性和方法時,就可以將相同的屬性和方法抽取到一個父類中。

(2)當a類完全擁有b類中的部分屬性和方法時,可以考慮讓b類繼承a類(考慮),在這種情況下,也可以考慮使用組合。

繼承:###是xxx,如狗是動物,可以讓狗繼承動物類

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

 

五、關鍵字super

super關鍵字,在子類中重寫方法時,可以讓調用者跳過這一層而調用父類中的方法。

作用:

(1)直接調用父類中的某一個方法

(2)super處在對象方法中,那么就會調用父類的對象方法;super處于類方法中,那么就會調用父類的類方法。

使用場景:子類在重寫父類方法時,想要保留父類的一些行為。

延伸 · 閱讀

精彩推薦
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
主站蜘蛛池模板: 精品久久久久中文字幕日本 | 久久国产乱子伦免费精品 | 视频一区二区国产无限在线观看 | 亚洲一二三区久久五月天婷婷 | 午夜视频一区二区三区 | 日本精品一区二区在线播放 | 成人午夜在线视频 | 99精品国产高清一区二区三区香蕉 | 美国美女hd18 | 亚洲福利一区 | 出a级黑粗大硬长爽猛视频 吃胸膜奶视频456 | 草留色区 | 午夜小视频网站 | 夫妻性生活在线 | 大胆人gogo888体艺术在线 | 娇妻中日久久持久久 | 香蕉国产人午夜视频在线观看 | 免费看的毛片 | chinese国产打屁股 | а天堂中文最新版在线官网视频 | 亚洲高清免费在线观看 | 免费视频左左视频 | 韩国www | 精品日韩二区三区精品视频 | 全彩孕交漫画福利啪啪吧 | 国产精品永久免费视频观看 | 午夜视频网站 | 9总探花新品牛仔背带裤 | 999热在线精品观看全部 | 乳女教师欲乱动漫无修版动画3d | 久热这里只有精品99国产6 | 大桥未久一区二区 | 亚洲精品久久久992KVTV | 青苹果乐园影院在线播放 | 欧美日韩国内 | 歪歪动漫小说sss | 国产综合成人久久大片91 | chinaese中国女人厕所小便 | 亚洲国产综合网 | 国产综合久久久久 | 免费大秀视频在线播放 |