国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

OC基礎(chǔ)--對(duì)成員變量的封裝

2019-11-14 18:25:55
字體:
供稿:網(wǎng)友
#import <Foundation/Foundation.h>//日期結(jié)構(gòu)體typedef struct{    int year;    int month;    int day;} Date;@interface School : NSObject{    //@public    NSString * _name;    NSString * _address;    Date _createTime;}- (void) introduction;@end
#import "School.h"@implementation School- (void)introduction{    NSLog(@"學(xué)校名稱:%@, 學(xué)校地址:%@, 創(chuàng)辦時(shí)間:%i 年 %i月 %i日", [self name], [self address], [self createTime].year, [self createTime].month,[self createTime].day);}@end
#import <Foundation/Foundation.h>#import "School.h"int main(int argc, const char * argv[]) {         School * s = [School new];     s->_name = @"科技大學(xué)";     s->_address = @"XX省XX市XX區(qū)XX路XX號(hào)";     s->_createTime.year = 2045;     s->_createTime.month = 13;     s->_createTime.day = 34;       [s introduction];        return 0;}

如果成員變量是public, 給成員變量賦值的時(shí)候, 賦予的值不受我們的約束, 在外部可以隨便讀寫  外界有可能賦值一些臟數(shù)據(jù)

 封裝:

  屏蔽內(nèi)部實(shí)現(xiàn)的細(xì)節(jié), 僅僅對(duì)外提供共有的方法/接口

  好處:保證數(shù)據(jù)的安全性    將變化隔離

  規(guī)范: 將不需要對(duì)外提供的內(nèi)容都隱藏起來,把屬性都隱藏,提供公共的方法對(duì)其訪問

Getter - Setter方法:

  setter方法:

     作用: 設(shè)置成員變量的值

     格式:

       1. setter方法一定是對(duì)象方法

       2. 一定沒有返回值

       3. 一定以set開頭, 并且set后面跟上需要設(shè)置的成員變量的名稱去掉下劃線, 并且首字母大寫

       4. 一定有參數(shù), 參數(shù)類型一定和需要設(shè)置的成員變量的類型一致, 并且參數(shù)名稱就是成員變量的名稱去掉下劃線

        //成員變量以下劃線開頭的好處,就是可以區(qū)分局部變量和成員變量        - (void) setName: (NSString *) name{           //可在這里添加驗(yàn)證代碼對(duì)傳入的數(shù)據(jù)做驗(yàn)證            _name = name;        } 

   getter方法:

     作用: 獲取成員變量的值

     格式:

       1. getter方法一定是對(duì)象方法

       2.一定有返回值, 而且返回值一定和獲取的成員變量的類型一致

       3.方法名稱就是獲取的成員變量的名稱去掉下劃線

       4. 一定沒有參數(shù)

        - (NSString* ) name{            return _name;        } 

     > 一個(gè)屬性可以只有g(shù)etter方法, 沒有setter方法, 這種屬性我們稱之為只讀屬性

     > 一個(gè)屬性也可以只有setter方法, 沒有g(shù)etter方法, 這種屬性我們稱之為只寫屬性

     > 如果既有setter方法又有g(shù)etter方法, 那么這種屬性我們稱之為可讀可寫的屬性

     > 一個(gè)屬性也可以沒有g(shù)etter和setter, 這種屬性我們稱之為私有屬性

  Getter - Setter 方法的調(diào)用:   

   Date date = {1990, 1, 1};       School * s = [School new];     [s setName:@"test"];    [s setAddress:@"tset"];    [s setCreateTime:date];        NSLog(@"學(xué)校名:%@", [s name]); 

  點(diǎn)語法:

       > 如果給屬性提供了getter和setter方法, 那么訪問屬性就又多了一種訪問方式 , 點(diǎn)語法

       > 點(diǎn)語法其實(shí)它的本質(zhì)就是調(diào)用setter和getter方法

       > 點(diǎn)語法是一個(gè)編譯器的特性, 會(huì)在程序翻譯成二進(jìn)制的時(shí)候?qū)?語法自動(dòng)轉(zhuǎn)換為setter和getter方法的調(diào)用

       > 如果點(diǎn)語法在=號(hào)的左邊, 那么編譯器會(huì)自動(dòng)轉(zhuǎn)換為setter方法

       > 如果點(diǎn)語法在=號(hào)的右邊, 或者沒有等號(hào), 那么編譯器就會(huì)自動(dòng)轉(zhuǎn)換為getter方法  

     s.name = @"test";       // 等效于  [s setName:@"test"];      s.address = @"測(cè)試";     // 等效于  [s setAddress:@"測(cè)試"];      s.createTime = date;    // 等效于  [s setCreateTime:date];         NSLog(@"學(xué)校名:%@, 學(xué)校地址:%@", s.name, s.address);      // 等效于  NSLog(@"學(xué)校名:%@, 學(xué)校地址:%@", [s name], [s address]); 

         > 點(diǎn)語法一般用于給成員變量賦值, 如果不是給成員變量賦值一般情況下不建議使用, 但是也可以使用

    - (void)test:(int)num{        NSLog(@"測(cè)試數(shù)據(jù) %i", num);    }    s.test;   // 等效于  [s test]

 

#import <Foundation/Foundation.h>//日期結(jié)構(gòu)體typedef struct{    int year;    int month;    int day;} Date;@interface School : NSObject{    //@public    NSString * _name;    NSString * _address;    Date _createTime;}-(void) setName: (NSString *) name;-(NSString* ) name;- (void) setAddress: (NSString *) address;- (NSString *) address;- (void) setCreateTime: (Date) date;- (Date) createTime;- (void) introduction;- (void) test;- (void) test: (int) num;@end#import "School.h"@implementation School-(void) setName: (NSString *) name{    //可在這里添加驗(yàn)證代碼對(duì)傳入的數(shù)據(jù)做驗(yàn)證    _name = name;}- (NSString* ) name{    return _name;}- (void) setAddress: (NSString *) address{    _address = address;}- (NSString *) address{    return _address;}- (void) setCreateTime: (Date) date{    _createTime = date;}- (Date) createTime{    return _createTime;}- (void)introduction{    NSLog(@"學(xué)校名稱:%@, 學(xué)校地址:%@, 創(chuàng)辦時(shí)間:%i 年 %i月 %i日", [self name], [self address], [self createTime].year, [self createTime].month,[self createTime].day);}//測(cè)試點(diǎn)語法訪問非getter-setter方法- (void)test{    NSLog(@"點(diǎn)語法調(diào)用無參對(duì)象方法");}- (void)test:(int)num{    NSLog(@"測(cè)試數(shù)據(jù) %i", num);}@end#import <Foundation/Foundation.h>#import "School.h"int main(int argc, const char * argv[]) {        //School * s = [School new];//    s->_name = @"科技大學(xué)";//    s->_address = @"XX省XX市XX區(qū)XX路XX號(hào)";//    s->_createTime.year = 2045;//    s->_createTime.month = 13;//    s->_createTime.day = 34;        Date date = {1990, 1, 1};    School * s = [School new];        s.name = @"test";       // 等效于  [s setName:@"test"];    s.address = @"測(cè)試";     // 等效于  [s setAddress:@"測(cè)試"];    s.createTime = date;    // 等效于  [s setCreateTime:date];        NSLog(@"學(xué)校名:%@, 學(xué)校地址:%@", s.name, s.address);    // 等效于  NSLog(@"學(xué)校名:%@, 學(xué)校地址:%@", [s name], [s address]);        // 點(diǎn)語法調(diào)用無參對(duì)象方法警告信息: PRoperty access result unused - getters should not be used for side effects    s.test;         // 等效于  [s test];    // 點(diǎn)語法調(diào)用帶參對(duì)象方法 編譯直接報(bào)錯(cuò)    s.test:111;               [s introduction];        return 0;}

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建宁县| 鲁甸县| 龙江县| 界首市| 故城县| 乐安县| 柳江县| 体育| 晋州市| 西乌| 申扎县| 隆化县| 凤冈县| 恩平市| 孝昌县| 祁门县| 长乐市| 会宁县| 肇庆市| 三原县| 天长市| 察隅县| 介休市| 全州县| 名山县| 台南县| 含山县| 本溪市| 深泽县| 汤原县| 宁都县| 阳东县| 佛冈县| 穆棱市| 乾安县| 莎车县| 东源县| 仁怀市| 高雄市| 郓城县| 汉阴县|