1. 程式人生 > >【OC學習-8】存取器方法?getter和setter?事實上就是賦值和返回值的兩種函數

【OC學習-8】存取器方法?getter和setter?事實上就是賦值和返回值的兩種函數

trac -m main 都是 protect pro 聲明 return 安全

我們在聲明類的時候,有實例變量+方法(函數),這些實例變量假設默認的話都是protected類型,一般無法直接訪問。更別提賦值和調用了,所以就產生了兩種函數,getter函數就是可以返回實例變量的值,setter函數就是可以設置實例變量的值。(當然假設你把實例變量改成public的話可以直接調用,但不安全)


存取器方法(函數)就是:存——賦值setter函數。取——返回值getter函數。


(1)先在類的.h文件中面聲明這個函數(方法)。一般都有默認的格式(例如以下):返回值函數的函數名字一般都和變量同樣,如name,sid,age;設置值函數的函數名字一般都是set+變量名(首字母大寫)。如setName。setAge,setSid。

    //在ASStudent.h裏面聲明的函數(方法)
    -(void)setName:(NSString *)aName;
    -(void)setAge:(int)aAge;
    -(void)setSid:(NSString *)aSid;
    -(NSString*)name;
    -(NSString *)sid;
    -(int)age;

(2)在類的.m文件中面設置函數(方法)詳細內容。這個非常easy。由於這個函數(方法)實現的功能非常easy(返回值或者設置值的功能)

//設置值就是把形參值傳遞給實例變量值
-(void)setName:(NSString *)aName{
        name=aName;
    }

    -(void)setAge:(int)aAge{
        age=aAge;
    }

    -(void)setSid:(NSString *)aSid;{
        sid=aSid;
    }

//返回值就是直接return這個實例變量本身
    -(NSString*)name{
        return name;
    }

    -(NSString *)sid{
        return sid;
    }

    -(int)age{
        return age;
    }

(3)在main.m裏面使用時候能夠用函數形式也能夠用點形式

//兩者同樣。以下那個點函數在賦值時,事實上系統還是會調用上面那個函數
[zhang setName:@"tom"];
zhang.name=@"tom";

//兩者同樣,以下那個點函數在返回值時。事實上系統還會調用上面那個函數
NSLog(@"%@,%d",[zhang name],[zhang age]);
NSLog(@"%@,%d",zhang.name,zhang.age);

所以,至於能夠使用點函數來書寫,事實上是為了方便程序猿,由於原理。著也是OC近期版本號改進的功能。

【OC學習-8】存取器方法?getter和setter?事實上就是賦值和返回值的兩種函數