黑馬程式員---Objective-C基礎學習---點方法使用和成員變數的範圍

來源:互聯網
上載者:User

標籤:

                              ------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

一、點文法

oc設計點文法的目的就是讓其他語言的開發人員能快速上手oc這門語言,oc點文法與java裡面很像,那什麼是點文法呢,點文法怎麼用呢?

1、點文法和set和get方法有關

這裡建立一個項目,添加一個Person類

Person.h

 1 // 2 //  Person.h 3 //  zijia 4 // 5 //  Created by zou on 5/10/15. 6 //  Copyright (c) 2015 __MyCompanyName__. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 11 @interface Person : NSObject12 {13     int _age;14     15 }16 17 - (void)setAge:(int)age;18 - (int)age;19 @end

Person.m

 1 // 2 //  Person.m 3 //  zijia 4 // 5 //  Created by zou on 5/10/15. 6 //  Copyright (c) 2015 __MyCompanyName__. All rights reserved. 7 // 8  9 #import "Person.h"10 11 @implementation Person12 - (void)setAge:(int)age13 {14     _age = age;15 }16 - (int)age17 {                18     return _age;19 }20 @end

main.m

 1 // 2 //  main.m 3 //  zijia 4 // 5 //  Created by zou on 5/9/15. 6 //  Copyright (c) 2015 __MyCompanyName__. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 #import "Person.h"11 12 int main(int argc, const char * argv[])13 {14 15     @autoreleasepool {16         17         Person *p = [Person new];18         [p setAge : 10];19         int a = [p age];20         NSLog(@"age is %d",a);21         22     }23     return 0;24 }

這裡是通過set個get方法來改變和擷取成員變數的值,但是看起來有點古怪,可以使用點文法來替代。

p.age = 10; //[p setAge : 10];

點文法的本質還是方法調用,而不是訪問成員變數,訪問成員變數方法應該是:p->age=10。這裡點文法了調用set方法,那get方法如何用點文法實現呢?

int a = p.age; // int a = [p age];

使用點文法需要注意點什麼呢,看下面代碼:

Person.m 

- (void)setAge:(int)age{    // _age = age;    NSLog(@"setAge-");    self.age = age;}

這裡set方法中,_age = age 能不能使用點文法 self.age = age代替呢?

self.age 相當於調用setAge方法[self setAge:age],這樣程式又調用setAge方法,這樣程式進入死迴圈。

列印輸出:

 

如果在get方法實現中寫return self.age則程式也進入死迴圈。

- (int)age{                    NSLog(@"age-");    return self.age;    // return _age;}@end

執行代碼:

這裡再一次說明了點文法本質是調用set方法。如果程式中有點文法而沒有set和get方法,則程式會報錯。

 

二、成員變數範圍

成員變數範圍分為四種:

1、@private: 只能在當前類的實現@implementation 中直接存取

2、 @protected: 可以在當前類以及子類的實現@implementation中直接存取

3、 @public: 任何地方都可以直接存取

4、 @package: 同一個“體系內”(架構)可以訪問,介於@private和@public之間

在成員變數前面加上關鍵字,那麼成員變數的範圍也隨之改變。

子類能不能使用父類的私人成員變數呢?答案是不能,只能通過調用父類的set和get方法來訪問父類的私人成員變數。

如果不寫關鍵字,成員變數預設為@protected,只能被當前類以及子類的實現部分訪問。

在實現部分定義的成員變數預設都是私人的。

黑馬程式員---Objective-C基礎學習---點方法使用和成員變數的範圍

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.