点语法
点语法本质是函数的调用,不是像java中那样,是用来访问成员变量的;oc中访问成员变量是用 -> 访问的;
Person *p = [Person new];
p.age = 10; // 如果点语法是进行了赋值操作,那么就相当于调用了setter方法;
[p.age]; // 这样不赋值相当于调用了getter;
注意点:
尽量不要在setter或getter中调用点语法,容易引发死循环;死循环是由于递归调用引发的;
// 在setter调用点语法 - (void)setAge:(int)age { _age = age; self.age = 10; // 这个setter会无限重复的递归,而没有递归结束的条件; }
成员变量的作用域:或者叫权限修饰符
注意理解“直接访问”这四个字,是指通过对象名直接访问,不是通过setter和geter,这样就不叫直接访问了;
@public :任何地方都能直接访问对象的成员变量
@private:只能在本类的对象方法中直接访问,需要注意子类虽然不能直接访问,但是子类任然具有该属性,科通过父类的getter和setter访问
@protected:能在本类和子类的对象方法中直接访问
@package:在同一个框架中可以直接访问
没有添加任何修饰符,直接定义的成员变量,默认是protected,前提是这个成员变量是定义在@interface中的,注意在@implementation中也可以定义成员变量,而在这里定义的成员变量默认是@private,因为.m文件是不会被别人包含的;但是在implementation中声明的成员变量是不能和@interface中的成员变量重名的;