1. 程式人生 > >黑馬程式設計師——OC基礎——set方法和get方法

黑馬程式設計師——OC基礎——set方法和get方法

-----------android培訓java培訓、java學習型技術部落格、期待與您交流!------------

我們在OC中定義一個類的時候,它的成員變數預設情況下是@protected的。這是因為我們的成員變數一般不允許直接去訪問,如果需要修改和訪問成員變數我們就要用到成員變數的set方法和get方法。

set方法是用來給成員變數進行賦值的,也可以起到對傳入的資料進行過濾的作用。

set方法的命名規範是:以set為開頭,後面加上成員變數名,成員變數名的首字母要大寫,再後面就是傳入的形參的名稱。例如成員變數是NSString *_name;這時定義的set方法的形式就是- (void)setName:(NSString *)name; 這裡void是方法的返回值型別,由於set方法不需要返回值,這裡我們就寫入void型別,NSString *是形參的型別。這裡我們要注意方法的返回值型別和形參的型別都要用小括號括起來,set方法名跟引數之間要用“:”隔開。

get方法的命名規範是:前面是方法的返回值型別,後面寫上成員變數名。例如成員變數是NSString *_name;這時定義的get方法的形式就是- (NSString *)name; 這裡NSString *是方法的返回值型別,name是get方法的名稱。這裡我們要注意方法的返回值型別要用小括號括起來。

上面就是set方法和get方法的命名規範。

下面我們新建一個Person類並學習set方法和get方法的宣告和實現。

首先,我們新建一個Person類並 對set和get方法進行宣告。下面就是對set和get方法的宣告:

@interface Person:NSObject
{
    int _age;
    NSString *_name;
}
- (void)setAge:(int)age;
- (int)age;

- (void)setName:(NSString *)name;
- (NSString *)name;
@end

上面就是對成員變數_age和_name的宣告。那麼set和get方法又是怎麼實現的呢?我們通過下面的程式碼來學習成員變數_age和_name的set和get方法的實現。
@implementation Person
// 成員變數_age的set和get方法的實現
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age;
{
    return _age;
}
// 成員變數_name的set和get方法的實現
- (void)setName:(NSString *)name
{
    _name = name;
}
- (NSString *)name
{
    return _name;
}
@end

上面的程式碼我們省略了set方法中對資料的判斷,平常寫程式碼的時候要注意在set方法裡寫上對傳入的資料的判斷,以避免傳入的資料不合理。

那麼怎麼用set和get方法對成員變數進行賦值並得到成員變數的值呢?我們在main函式中設定和取出成員變數的值:

int main()
{
    // 建立一個Person物件p1
    Person *p1 = [Person new];
    
    // 給成員變數_age和_name賦值
    [p1 setAge:18];
    [p1 setName:@"張三"];
    
    //取出並輸出成員變數的值
    NSLog(@"_age = %d, _name = %@", [p1 age], [p1 name]);

    return 0;
}

輸出結果是:

_age = 18, _name =張三

從輸出結果可以看出我們的確成功地設定和取出了成員變數的值了。呼叫物件方法時的形式:[物件名 方法名];

上面就是set方法和get方法的宣告和實現,但我們可以發現如果成員變數有很多時,我們在寫各個成員變數的set和get方法的時候就會非常繁瑣,而且這些程式碼都是沒有實際意義的。在Xcode中,蘋果官方給我們提供了一個生成set和get方法的宣告和實現的快捷方式:@property和@synthesize。

@property是用來生成成員變數的set和get方法的宣告的。下面我們用@property來實現上面例子中的宣告:

@interface Person : NSObject
{
    int _age;
    NSString *_name;
}

// 用@property來實現set和get方法的宣告
@property int age;
@property NSString *name;
@end

就是這麼簡單,只需要在@property後面加上資料型別和變數名就可以了,注意變數名不要連下劃線一塊寫。

下面我們用@synthesize對set和get方法進行實現:

@implementation Person
// 利用@synthesize實現成員變數的set和get方法
@synthesize age = _age;
@synthesize name = _name;
@end

這種方式已經對程式碼量進行了很大的精簡了,但是我們還有更加精簡的方式:
@interface Person : NSObject
//{
//    int _age;
//    NSString *_name;
//}

// 用@property來實現set和get方法的宣告
@property int age;
@property NSString *name;
@end

@implementation Person
// 利用@synthesize實現成員變數的set和get方法
//@synthesize age = _age;
//@synthesize name = _name;
@end

上面的程式碼也實現了對成員變數的宣告和實現,但是我們成員變數呢?我們的@synthesize呢?

當省略成員變數的時候,我們的@synthesize會自動在方法的實現中對成員變數進行定義,而且定義的成員變數是@private型別的。當省略@synthesize時我們的@property又會自動生成@synthesize程式碼,所以我們可以只寫@property就可以實現定義變數、宣告set和get方法和實現set和get方法。

以上就是set和get方法的簡單介紹和簡化操作。我們要注意以下幾點:

1、為什麼使用set和get方法?

這是因為我們的成員變數要進行封裝,不能讓外部直接對變數進行修改和訪問。這提高了安全性的同時也可以讓我們不需要去關注實現的細節。

2、掌握set和get方法的宣告和實現的具體操作。

3、掌握@property和@synthesize的作用和使用方法。

總結:

1、set方法和get方法是用來對資料進行設定和取值的。

2、在set方法中我們可以對傳入的資料進行判斷,以防止輸入一些不合理的值。

3、我們可以利用@property來實現set和get方法的宣告,利用@synthesize對set和get方法進行實現。這樣可以簡化我們要輸入的程式碼。

4、定義屬性的時候最好在前面加上下劃線。

相關推薦

黑馬程式設計師——OC基礎——set方法get方法

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 我們在OC中定義一個類的時候,它的成員變數預設情況下是@protected的。這是因為我們的成員變數一般不允許直接去訪問,如果需要修改和訪問成員變數我們

黑馬程式設計師--OC基礎--類方法、物件方法self的使用

1、類方法 (1)類方法就是一個方法,它的使用不需要使用者去建立一個類的例項進行呼叫而可以直接通過類名對方法進行呼叫。 宣告一個類方法的格式: +(返回值型別) 方法名:(引數1型別)引數1名稱 方法名:(引數2型別)引數2名稱; 例:

黑馬程式設計師——OC基礎——構造方法

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 前面我們用OC的類建立物件的時候我們用的是new方法。其實new方法是一個組合的方法,它是由兩個方法組合在一塊的,分別是alloc方法和init方法。其

黑馬程式設計師--OC基礎[email protected]@synthesize

1、@property關鍵字 (1)基本概念 @property是編譯器指令,所謂編譯器指令,就是告訴編譯器要做什麼。 @property告訴編譯器宣告屬性的訪問器(setter/getter)方法,這樣的好處是免去了程式設計師編寫set和get的

黑馬程式設計師 OC基礎: 記憶體管理

記憶體管理 簡述 每個 oc 物件都有自己的引用計數器,是一個整數,表示”物件被引用的次數”.佔四位元組 計數器預設值為1 當為0時,物件佔用的記憶體會被系統回收. 引用的操作 給物件傳送一條 retain 計數器+1 給物件傳送一

黑馬程式設計師——OC基礎---Foundation框架之結構體

一、概述 Foundation—基礎框架。框架中包含了很多開發中常用的資料型別,如結構體,列舉,類等,是其他ios框架的基礎。 如果要想使用foundation框架中的資料型別,那麼包含它的主標頭檔案就可以了。 即#import #import &l

黑馬程式設計師基礎加強註解泛型

---------------------- android培訓、java培訓、期待與您交流! ----------------------瞭解註解及Java提供的幾個基本註解:註解相當於一種標記,加了註解就等於打上了

黑馬程式設計師——OC基礎—記憶體管理

=== 記憶體管理機制 === OC的區域性變數在程式碼塊結束時被系統銷燬, 記憶體被回收. OC的物件, 內部有引用計數器, 當引用計數器的值為0時, 被系統銷燬, 記憶體被回收. 區域性變數存放在棧中. 物件存放在堆中. 注意, 物件指標還是存放在棧中, 物件本身佔用的記憶體存放在堆中. 在OC

黑馬程式設計師——OC基礎---記憶體管理

1. 控制set方法的記憶體管理 retain : release舊值,retain新值(用於OC物件)  assign : 直接賦值,不做任何記憶體管理(預設,用於非OC物件型別) copy   : release舊值,copy新值(一般用於NSString *) 2.  控制需不需生成set方法 re

黑馬程式設計師——OC基礎——記憶體管理(一)

一,為什麼要進行記憶體管理 1,由於移動裝置的記憶體有限,所以每個APP所佔的記憶體也是有限制的,當APP所佔用的記憶體較多時,系統就會發出警告,這時就需要回收一些不需要繼續使用的記憶體空間,比如回收一些不再使用的物件和變數等。 任何繼承NSObject的物件,對其他的基

黑馬程式設計師------OC基礎-----記憶體管理

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ------- 法則 誰建立記憶體誰就要釋放記憶體 管理機制 引用計數器 1使用alloc(相當於C語言中的malloc)為物件分配記憶體,使用dealloc(相當與C語言中的fre

黑馬程式設計師-OC學習筆記-點方法、成員變數作用域以及set方法get方法@property的綜合題

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 1.  OC建立物件的拓展: Frac

黑馬程式設計師-OC-類方法物件方法的呼叫

1.類方法 宣告:在.h檔案中宣告,必須以+開頭。 實現:在.m檔案中實現 2.物件方法 宣告:在.h檔案中宣告,必須以-開頭。 實現:在.m檔案中實現 對比: 1)類方法只能類呼叫,物件方法只能物件呼叫 2)類方法與物件方法可以

黑馬程式設計師——OC語言基礎——面向物件三大特性之多型

繼前兩篇博文梳理了一下我對OC中面向物件三大特性的封裝、繼承之後。最重要也是最不容易理解的多型概念終於到來。 個人認為多型在三大特性中是最為重要的,但是由於它的概念性不容易用語言描述清楚,所以我還是想引用視訊教程中老師說的那句經典。 多型的實質就是: 父類的指標 指向了

黑馬程式設計師OC(@property@synthesize)

1.  @property   @property用在@interface中,寫法如下: #import<Foundation/Foundation.h> @interface Person :NSObject { int _a

黑馬程式設計師 oc隨記 類方法與物件方法

------- android培訓、java培訓、ios培訓、期待與您交流! ---------- 類方法與物件方法相比較,最根本的好處在於節省記憶體空間。 物件方法在執行時是先從記憶體棧區訪問記憶體堆區的地址,再從記憶體堆區尋找方法位於記憶體程式碼區的地址,最終返回值。

黑馬程式設計師Linux基礎 vmware tools總結

  昨天華為電話技術面試,感覺自己學的很粗糙,問的問題都知道大概,不能準確回答,本週目標,把課程 過一遍,學會點東西,而不是皮毛。遇到問題別放棄,敢於鬥爭。工業產品而不是學習隨意產品。 好習慣,別貪 開發環境搭建 由於我之前在一臺電腦安裝過虛擬機器,直接把它克隆到

黑馬程式設計師OC語言基礎—記憶體管理

之前我們已經提到過C語言中的記憶體儲存空間。有五大區域:堆、棧、自由儲存區、全域性\靜態儲存區和常量儲存區。 OC是以C語言為基礎的,所以也分這五大區域。 下面我們討論一下OC中記憶體管理的規律。 一、引用計數器 1.每個OC物件都有自己的引用計數器,是一個整數,即物件被

黑馬程式設計師-OC——類物件

類名;Car 屬性 :輪胎個數、時速 行為:跑 // 因為使用了NSobject #import <Foundation / Foundation .h> //完整地寫一個函式:函式的宣告和實現 //完整的寫一個類:類的宣告和實現 // 類的宣告 //宣告物件的

黑馬程式設計師——IOS基礎——OC記憶體管理

=====================引用計數器開始==================== 基本型別資料存放在棧中,物件存放在堆中 棧中的資料系統自動回收 堆空間中的資料動態分配,不能自動分配,容易引起記憶體洩露 需要給物件傳送訊息,讓它回收,即呼叫物件的回收方法