一、 点语法(编译器特性)
1. 利用点语法替换set方法和get方法
a. 方法调用
Student *stu = [Student new];
[stu serAge:100];
int age = [stu age];
b. 点语法
Stu.age = 100;
int age = str.age;
2. 点语法的本质
a. 点语法的本质是方法调用
b. 当使用点语法时,编译器会自动展开成相应的方法
Stu.age = 10; 展开为
[stu setAge:10];
Int age = stu.age; 展开为
Int age = [stu age];
3. 死循环注意
(void)setAge:(int)age
{
// 下面代码会引发死循环
self.age= age; // [self setAge:age];
}
(void)age
{
// 下面代码会引发死循环
returnself.age; // return [self age];
}
二、 成员变量的作用域
1. 基本概念
局部变量、全局变量都有自己的作用域,成员变量也不例外
2. 类型
a. @private:只能在当前类的实现@implementation中直接访问(@implementation中默认就是private)
b. @protected:可以在当前类以及子类的实现@implementation中直接访问(@interface中默认就是protected)
c. @public:任何地方都可以直接访问
d. @package:同一个“体系内“(框架)可以访问,介于@private和@public之间
Ps:成员变量也可以定义在@implementation中,默认是私有的,跟关键字无关(就算在定义成员变量前加上@public也没用)
3. @implementation补充
没有@interface,只有@implementation,也可以开发一个类(不建议这样写)
@implementation中不能定义和@interface中同名的成员变量