第04天OC語言(04):property增強(qiáng)

  • 不要等到明天,明天太遙遠(yuǎn),今天就行動。
須讀:看完該文章你能做什么?

你能知道property內(nèi)部做了什么事情
1> 生成setter方法、getter方法
2> 在內(nèi)部生成一個私有的變量(_成員變量)
3> 和@synthesize age有區(qū)別 ,@synthesize age;直接賦值給age

學(xué)習(xí)前:你必須會什么?

了解什么是封裝。


一、本章筆記
 一、
     從Xcode4.4以后 Apple 對 @property進(jìn)行一個增強(qiáng),以后只要利用一個 @property 就可以同時生成 setter 、 getter 方法的聲明 和實(shí)現(xiàn)
     沒有告訴 @property 要將傳入的參數(shù)賦值給誰,默認(rèn) @property 會將傳入的屬性 賦值給 _開頭的成員變量
     
     @property 有一個弊端: 他只會生成 最簡單的getter\setter方法的聲明和實(shí)現(xiàn),并不會對傳入的數(shù)據(jù)進(jìn)行過濾
     如果想對傳入的數(shù)據(jù)進(jìn)行過濾,那么我們就必須重寫 setter\getter方法
     如果不想對傳入的數(shù)據(jù)進(jìn)行過濾,僅僅是提供一個方法給外界操作變量,那么就可以使用
     
     如果利用 @property來生成 getter/setter方法,那么我們可以不寫成員變量,系統(tǒng)會自動給我們生成一個 _開頭的成員變量
     注意: @property 自動帶我們生成的成員變量 是 一個私有的成員變量, 也就是說是.m文件中生成的,而不是在.h文件中生成的
 二、
     如果重寫了setter方法,那么property就只會生成getter方法
     如果重寫了getter方法,那么property就只會生成setter方法
     如果同時 重寫了getter/setter方法,那么@property就不會自動 帶我們生成私有的成員變量
 三、注意:
     系統(tǒng) 和 @synthesize 有點(diǎn)區(qū)別
     系統(tǒng)直接賦值給 _age
     而使用 @synthesize age; 系統(tǒng) 則會賦值給 age;
二、code
main.m
#pragma mark 04-property增強(qiáng)
#pragma mark 概念
/*
 一、
     從Xcode4.4以后 Apple 對 @property進(jìn)行一個增強(qiáng),以后只要利用一個 @property 就可以同時生成 setter 、 getter 方法的聲明 和實(shí)現(xiàn)
     沒有告訴 @property 要將傳入的參數(shù)賦值給誰,默認(rèn) @property 會將傳入的屬性 賦值給 _開頭的成員變量
     
     @property 有一個弊端: 他只會生成 最簡單的getter\setter方法的聲明和實(shí)現(xiàn),并不會對傳入的數(shù)據(jù)進(jìn)行過濾
     如果想對傳入的數(shù)據(jù)進(jìn)行過濾,那么我們就必須重寫 setter\getter方法
     如果不想對傳入的數(shù)據(jù)進(jìn)行過濾,僅僅是提供一個方法給外界操作變量,那么就可以使用
     
     如果利用 @property來生成 getter/setter方法,那么我們可以不寫成員變量,系統(tǒng)會自動給我們生成一個 _開頭的成員變量
     注意: @property 自動帶我們生成的成員變量 是 一個私有的成員變量, 也就是說是.m文件中生成的,而不是在.h文件中生成的
 二、
     如果重寫了setter方法,那么property就只會生成getter方法
     如果重寫了getter方法,那么property就只會生成setter方法
     如果同時 重寫了getter/setter方法,那么@property就不會自動 帶我們生成私有的成員變量
 三、注意:
     系統(tǒng) 和 @synthesize 有點(diǎn)區(qū)別
     系統(tǒng)直接賦值給 _age
     而使用 @synthesize age; 系統(tǒng) 則會賦值給 age;
 */
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person.h"
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
    Person *p = [Person new];
    [p setAge:25];
//    NSLog(@"age = %i",[p age]);
#pragma 驗(yàn)證系統(tǒng)賦值給那個age? _age?
    /*
     注意:
     系統(tǒng) 和 @synthesize 有點(diǎn)區(qū)別
     系統(tǒng)直接賦值給 _age
     而使用 @synthesize age; 系統(tǒng) 則會賦值給 age;
     */
//    NSLog(@"age = %i, _age = %i",p->age,p->_age);
//    p->_age
    return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
/*
{
    @public
    int _age;
    int age;
}
 */

#pragma @property增強(qiáng)
/*
 從Xcode4.4以后 Apple 對 @property進(jìn)行一個增強(qiáng),以后只要利用一個 @property 就可以同時生成 setter 、 getter 方法的聲明 和實(shí)現(xiàn)
 沒有告訴 @property 要將傳入的參數(shù)賦值給誰,默認(rèn) @property 會將傳入的屬性 賦值給 _開頭的成員變量
 
 @property 有一個弊端: 他只會生成 最簡單的getter\setter方法的聲明和實(shí)現(xiàn),并不會對傳入的數(shù)據(jù)進(jìn)行過濾
 如果想對傳入的數(shù)據(jù)進(jìn)行過濾,那么我們就必須重寫 setter\getter方法
 如果不想對傳入的數(shù)據(jù)進(jìn)行過濾,僅僅是提供一個方法給外界操作變量,那么就可以使用
 
 如果利用 @property來生成 getter/setter方法,那么我們可以不寫成員變量,系統(tǒng)會自動給我們生成一個 _開頭的成員變量
 注意: @property 自動帶我們生成的成員變量 是 一個私有的成員變量, 也就是說是.m文件中生成的,而不是在.h文件中生成的
 */
/*
 - (void)setAge:(int)age;
 - (int)age;
 */


// 這里不知道賦值給 同名的age 還是 _age?
@property int age;
@end

>>>.m
#import "Person.h"

@implementation Person

/*
 {
    int _age;
 }
 - (void)setAge:(int)age
 {
    _age = age;
 }
 - (int)age
 {
    _age = age;
 }

 */

/*
 如果重寫了setter方法,那么property就只會生成getter方法
 如果重寫了getter方法,那么property就只會生成setter方法
 如果同時 重寫了getter/setter方法,那么@property就不會自動 帶我們生成私有的成員變量
 */
- (void)setAge:(int)age
{
    if (age < 0) {
        age = 0;
    }
    _age = age;
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ⅰ 以前我寫過一篇文。說我為什么養(yǎng)不了動物。我說因?yàn)槲乙郧梆B(yǎng)的一只狗死了。讓我有心理陰影?,F(xiàn)在看來那或許只是借口,...
    我叫正經(jīng)閱讀 381評論 0 0
  • 【日?!?胃不好 也是常有的事了 前不久半夜爬起來去廁所里面吐 直犯惡心 也吃不下東西 跟朋友感慨真的是年紀(jì)大了經(jīng)...
    薛定諤的貓的樹閱讀 376評論 0 0
  • 1.1 Linux C語言結(jié)構(gòu)體 簡介:本課程深入的講解了C語言中,預(yù)處理是怎么回事,結(jié)構(gòu)體和公用體又是如何使用及...
    小白教你學(xué)Cplusplus閱讀 364評論 0 0

友情鏈接更多精彩內(nèi)容