1、点语法的来由
对对象成员变量的操作,最常规的做法是让成员变量私有化,让外界使用公共的get方法和set方法访问成员变量。很多其他的高级语言都有点语法,为了让其他行业的程序员快速上手OC,OC中也引入了点语法,只不过它的含义跟其他语言不太一样。
2、点语法的本质
2.1 点语法的本质是方法的调用,其实是XCode在内部进行转换。
如:p.age = 10 自动转换为 [p setAge:10];
#import <Foundation/Foundation.h>
@interface Student:NSObject
{
int _age; // 年龄
}
//声明ge的get和set方法
- (void)setAge:(int)age;
- (int)age;
@end
@implementation Student
//实现age的get和set方法
- (void)setAge:(int)age
{
NSLog(@"点语法调用set方法"); //测试是否调用了set方法
_age=age;
//会引发死循环
//self.age=age; // 相当于[self setAge:age];
}
- (int)age
{
NSLog(@"点语法调用get方法"); //测试是否调用了get方法
return _age;
//会引发死循环
//return self.age; // 相当于 retrun [self age];
}
@end
int main(){
Student *stu = [Student new]; //创建一个Student对象
stu.age=10; //等价于 [stu setAge:10];
int a = stu.age; //等价于 int a=[stu age];
NSLog(@"学生的年龄是%d岁",a); //打印年龄
return 0;
}
输出结果:
2015-02-04 05:57:12.798 a.out[476:6728] 点语法调用set方法
2015-02-04 05:57:12.800 a.out[476:6728] 点语法调用get方法
2015-02-04 05:57:12.800 a.out[476:6728] 学生的年龄是10岁
5、补充:成员变量的作用域
@public : 在任何地方都能直接访问对象的成员变量
@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
@package : 只要处在同一个框架中,就能直接访问对象的成员变量
@interface和@implementation中不能声明同名的成员变量