日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黑马程序员——OC语言基本语法知识(一)

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员——OC语言基本语法知识(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
*** 封裝 *** 一、 set方法

通過 指針->成員變量名 方式給成員變量賦值具有危險性,?可能被賦值為不合理的數值。不允許通過指針直接修改成員變量,?就要去掉@public。?通過方法來修改成員變量的值,?方法中可以加代碼保證接收的值是合理的賦值。

?

設置成員變量屬性值的方法,?通常稱為該屬性的set方法,?命名方式為?setAge: ,?接收一個相同類型的參數,形參的名稱不能和成員變量名相同。

?舉例:

  • -?(void)setAge:(int)newAge???
  • {??
  • ????????//?對傳進來的參數值進行過濾,?保證數據安全性??
  • ????????if?(newAge?<=?0)??
  • ????????????????newAge?=?1;??
  • ??
  • ????????//?把參數值賦給成員變量??
  • ????????age?=?newAge;??
  • }??
  • ???


  • ?

    在?main函數中調用set方法:

    [stu setAge:18]; ? ?//?賦值為18

    [stu setAge:-18]; ? //?默認賦值為1

    ?

    以后就不要寫@public了,?必須要通過set方法來設置成員變量。?可以保證成員變量數據的合理性。

    ?

    二、 get方法

    ?

    沒有@public,?我們就不能通過?stu->age?來查看成員變量的值?(被保護)。我們要通過調用方法來返回成員變量值。

    ?

    get方法:?返回該對象的成員變量值。

    ?舉例

  • -?(int)?age???
  • {??
  • ????????return?age;??
  • }??
  • ???


  • ?

    在main函數中調用get方法獲得age屬性的值:

    int myAge = [stu age];

    ?

    注意:?不是所有的成員變量都有set和get方法,?如果有的成員變量是只讀屬性(read only),?只能被訪問,?不能被修改,?這樣的情況就可以只提供get方法,?不寫set方法。

    ?

    三、 封裝的好處

    封裝可以保證數據的安全性。?如果要給成員變量賦值,?必須通過set方法進行訪問,?在set方法中,?可以添加對不合理的屬性值的過濾。

    ?

    四、 命名規范

    ?

    在get方法中,?方法名和返回的成員變量名是一樣的,?可讀性不好。?所以規范成員變量名以下劃線開頭,?便于和get方法名和局部變量名區分。

    ?

    成員變量名規范以?

  • @interface?Student?:?NSObject??
  • {??
  • ????????int?_age;??????//?規范的的成員變量名??
  • }??
  • @end??
  • ???
  • -?(void)?setAge:(int)age???
  • {??
  • ????????_age?=?age;????//?這樣set方法的形參名就可以和成員變量同名了(沒有下劃線)??
  • }??
  • -?(int)?age????
  • {??
  • ????????return?_age;??
  • }??
  • ???
  • //?調用是相同的??
  • [stu?setAge:18];??
  • int?myAge?=?[stu?age];??


  • ?

    *** 繼承 ***

    ?

    一、 基本概念

    類B繼承了類A,?那么類B具有類A的所有屬性和方法。

    在OC中繼承關系用?:?表示。

    比如我們要寫一個Dog類和一個Cat類,?兩個類擁有相似的成員變量和方法,?不想把代碼復制很多遍。可以寫一個Animal類,?把貓和狗相同的內容放到Animal里,?然后讓Dog和Cat繼承Animal類。

    ?

    二、 優缺點

    繼承的好處:?子類擁有父類的所有成員變量和方法,?減少重復代碼.?建立類之間的關系。

    ?

    繼承的缺點:?代碼耦合性太強?(類之間的關系太緊密,?如果某個類壞了,?另一個類會受影響)。

    ?

    我們的類如果不繼承NSObject就沒有new方法,?就沒有創建對象的能力。我們的類能夠調用new方法,?說明NSObject類擁有new方法。可以查看NSObject類的說明,?找到?+new?方法。

    NSObject是基類,?幾乎所有的類最終都是繼承于它。也有的類不是繼承NSObject的,?比如NSProxy,?它也是一個基類。

    ?

    子類有自己的成員變量方法和父類的所有成員變量和方法?(以及父類的父類的)。

    ?

    *** 多態 ***

    有繼承才有多態。

    多態就是可以用父類的指針指向子類的對象.?不管用什么指針,?調用方法時調用的都是對象的方法。

    ?

    一、 多態的好處:

    ?

    可以使用父類指針來代表各種子類對象調用函數,節省代碼。

    ?

    比如,?我們有一個Cat類,?有eat方法;?還有一個Dog類,?也有eat方法

  • @interface?Cat?:?Animal??
  • -?(void)?eat;??
  • @end??
  • ???
  • @implementation?Cat??
  • -?(void)?eat???
  • {??
  • ????????NSLog(@"Cat?is?eating");??
  • }??
  • @end??


  • ?

    ??

    我們想寫函數來喂動物,?喂Dog和Cat由于參數類型不同,?需要對每種類型都寫一個函數:

    ?


  • void?feed(Dog?*d)???
  • {??
  • ????????[d?eat];??
  • }??
  • void?feed2(Cat?*c?)????//?不允許同名函數??
  • {??
  • ????????[c?eat];??
  • }??
  • int?main()???
  • {??
  • ????????Dog?*d?=?[Dog?new];??
  • ????????feed?(d);??????//?喂狗??
  • ????????Cat?*c?=?[Cat?new];??
  • ????????feed2?(c);????//?喂貓??
  • ????????return?0;??
  • }??


  • ?

    ?

    這兩個函數體是很相似的,?而且如果有更多的動物,?還要寫很多相似的函數,?很麻煩,?還要使用不同的名字。

    這樣,就可以使用多態來簡化,寫一個Animal類,?作為Dog?和Cat的父類,?這樣在函數中就可以使用Animal *指針,?來指代Dog或Cat類型的參數:

    ?


  • void?feed(Animal?*a)?????//?a既可以是Dog,?也可以是Cat,?也可以是其它Animal??
  • {??
  • ????????[a?eat];?????????//?調用對象的eat方法??
  • }??
  • int?main()???
  • {??
  • ????????Dog?*d?=?[Dog?new];??
  • ????????feed?(d);????????//?調用的是Dog的eat方法??
  • ????????Cat?*c?=?[Cat?new];??
  • ????????feed?(c);????????//?調用的是Cat的eat方法??
  • ????????Animal?*a?=?[Animal?new];??
  • ????????feed?(a);??
  • }??


  • ?

    這樣只需要寫一個函數,?很方便,?而且調用的還都是每個對象自身的方法。

    ?

    二、 多態的局限性

    ?

    不建議用父類指針調用子類的特有方法。

    如果用父類指針調用子類在父類中沒有的方法,?雖然調用的是子類對象的方法,?但是編譯器會報警告,?因為它只能看到用父類的指針調用一個父類沒有的方法。

    舉例

  • @implementation?Animal??
  • @end??
  • @implementation?Dog??
  • -?(void)?run?{?...?}??
  • @end??
  • int?main()???
  • {??
  • ????????Animal?*a?=?[Dog?new];??
  • ????????[a?run];??
  • ????????return?0;??
  • }??
  • 可以正確運行,?但是編譯器會警告。??
  • 如果必須要這么寫,?規范方法是進行強制類型轉換:??
  • int?main()???
  • {??
  • ????????Animal?*a?=?[Dog?new];??
  • ????????Dog?*d?=?(Dog?*)a;??
  • ????????[d?run];??
  • ????????return?0;??
  • }??
  • 轉載于:https://www.cnblogs.com/HtercelH/p/4033735.html

    總結

    以上是生活随笔為你收集整理的黑马程序员——OC语言基本语法知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲码无人客一区二区三区 | 秋霞影院午夜丰满少妇在线视频 | 成人三级在线视频 | 在线免费看mv的网站入口 | 人人干人人干人人干 | 日韩一级欧美一级 | 蜜桃视频在线观看一区二区 | 中文资源在线观看 | 黄色国产视频 | 亚洲欧美视频二区 | 国产中文字幕免费 | 久久er99热精品一区二区介绍 | 国产精品久久久久久无人区 | 红桃视频隐藏入口 | 少妇人妻真实偷人精品视频 | 无码人妻精品一区二 | 日本亲子乱子伦xxxx50路 | 在线观看中文字幕视频 | 理论片91| 欧美精品 在线观看 | 久久久嫩草 | 操日本老妇 | 韩日av| 日韩高清av在线 | 香蕉网站在线 | 日日操天天射 | 91午夜在线观看 | 巨乳女教师的诱惑 | 成人免费在线播放视频 | 99在线精品视频免费观看20 | 91青青操| 一区二区三区影院 | 麻豆 国产| 操碰视频在线 | 五月婷婷激情小说 | 美女又黄又爽 | 久久久久玖玖 | 午夜精品久久久久久毛片 | 色图自拍偷拍 | 国产精品第1页 | 亚洲精品中文字幕乱码三区91 | 欧美xxxx18国产 | 欧美一级在线视频 | 中文字幕蜜臀 | 69精品久久| 91久久亚洲 | 免费成人黄色 | 精品一区在线观看视频 | 制服一区二区 | 久久精品中文闷骚内射 | 中国一级特黄毛片 | 久久三级视频 | 色多多av| 久久久久久久久久网站 | 免费看黄色一级视频 | www.色网| 韩国伦理片在线观看 | 狠狠狠| 在线观看的网站 | 99精品视频播放 | 亚洲视频免费播放 | 国产一区二区三区视频免费观看 | 久久性生活片 | 中文字幕乱码一区二区 | 久久77| 秋葵视频成人 | 日韩性xxx | 中文字幕在线三区 | 91九色国产| 国产靠逼视频 | 亚洲自拍激情 | 日韩国产精品视频 | 国产原创麻豆 | 亚洲av日韩av不卡在线观看 | 成人片在线播放 | 国产午夜精品理论片在线 | 青青久久久 | 琪琪电影午夜理论片八戒八戒 | 国产欧美精品一区 | 国产成人av在线 | 免费观看日批视频 | 美女搡bbb又爽又猛又黄www | 99re国产精品| 国产黑丝91 | 日本美女性生活视频 | 国产精品一区在线观看 | 不卡中文字幕在线 | 欧美在线一级 | 狠狠干视频网 | 三级网站国产 | 国产成人精品视频一区二区 | 亚洲欧美日韩国产成人精品影院 | 欧美图片第一页 | 午夜精品免费视频 | 自拍欧美日韩 | 久久夜色av| 欧美成人免费看 | 18一20岁毛毛片 | 最近中文字幕一区二区 |