标签:
------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 : NSObject 12 { 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 Person 12 - (void)setAge:(int)age 13 { 14 _age = age; 15 } 16 - (int)age 17 { 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基础学习---点方法使用和成员变量的作用域
标签:
原文地址:http://www.cnblogs.com/zss-itcast/p/4492690.html