------- android培训、java培训、IOS培训期待与您交流! ----------
一、OC点语法简述:
1>首先点语法本质上是方法的调用,不同于其他语言 如 JAVA 中 一个对象后面“点”就可以访问对象的变量属性,在OC中是不可以的。
2>当使用点语法时,我们的编译器会自动展开相应的方法。
如下例子:
Person *p = [Person new];
p.age = 12; // 这条语句中其实调用了我们的set方法 写法等同于:[p SetAge:12];
int a = p.age; //这条语句中其实调用了我们的get方法 写法等同于:[p age];
3>大家可以从上述例子中看到点语法其实在我们编程过程中使代码精简了不少同时方便使用,但是注意如果使用不当会给程序造成死循环。
死循环例子:
- (void) SetAge: (int) age
{
self.age = age;
}
这里我们是要修改我们的成员变量的值,往常我们会采用语句:_age = age;
但这里我们使用了self.age = age; 我们来分析一下这条语句到底可不可以。首先self.age 用到了self关键字:是指向调用当前方法的对象,所以self.age是调用当前对象的age方法,这一句一旦执行就一直调用我的age方法(即set方法),重复执行造成程序陷入死循环中,所以使用点语法时一定要慎用,注意使用场合。
二、成员变量的作用域
OC方法中成员变量的作用域类型分为四种:
1> @private 中文意思为私人的、私有的,所有它只能在当前类的实现@implementation中直接访问。
@protected 中文意思为受保护的,所以它可以在当前类以及子类的实现@implementation中直接访问。
@public 中文意思为公共的,所以它可以在任何地方都可以直接访问。
@package 中文意思为包、框架,所以同意它在同一个体系内(框架)中可以访问,介于@private和@public之间。
2> 一般情况下都会在我们类的声明中定义成员变量,但是这里我们需要注意:在@implementation中也可以定义成员变量,但成员变量类型默认为private。
3> 在类的声明和实现中定义成员变量时,注意不能有相同的成员变量名。
4> 作用域其实挺好理解,感觉也没什么难度,但是我们在项目开发过程中应该合理的定义成员变量以便更符合我们的业务要求和安全性。