標籤:
------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基礎學習---點方法使用和成員變數的範圍