实例变量的可见度:一共有三种
@public:公共的,在任何文件中都可以访问.(访问方式是通过对象+指向操作符+实例变量,例如:per->name) @protectde:受保护的,有一定的访问权限,只允许再本类文件以及子类文件中访问,其他文件不可以访问. @private:私有的,只允许再本类文件中访问,不可以在子类文件 以及其他文件中访问.
默认的可见度是@protected.
为什么不声明为@public?
1.声明为@public的实例变量,外部就可以访问以及修改,会影响内部的一个实现,暴露实现细节.
2.违背了OC面向对象三大特性之一---封装.(封装的思想是隐藏内部实现,提供外部访问的接口)
为什么不声明为@private?
1.声明为@private的实例变量,子类文件访问不到,所以子类文件还需重新定义声明.
2.违背了OC面向对象特性之一---继承.(父类有的东西,子类也有,可访问)
文件和类没有关系 . 文件中可以存放多个类 , 只要类符合接口部分以及实现部分的定义格式就可以了 .
一般情况下 , 一个文件中就定义一个类 , 而且文件的名字和类的名字一样 , 这样就能清晰的知道该文件中的类的名字 .
在 + 号方法中不能使用实例变量 , 实例变量是以依托与对象存在的 , 只有有了对象 , 实例变量才会有空间 .
//在多个类中,类鱼类之间循环调用,会出现以下错误,这时,对于头文件的导入,要用,@class + 类名,
<span style="font-size:18px;">#import "Women.h"
#import "Child.h"
@class Women;
@class Child;
//创建男人类
@interface Man : NSObject
{
@protected
NSString *_name; //姓名
NSString *_gender; //性别
NSInteger _age; //年龄
//Unkonwn type name "Women"
//意思:不能识别的类型Women
//产生原因:#import 头文件时,会将头文件的内容复制一份,而当使用Women这个类时,该类还未定义,所以识别不了.典型的循环导入问题.
//解决方案:使用该类时不能把它当做一个类来使用,所以在.h文件中使用@class Women; 将Women声明为一个字符串,再使用,但是它不具备类中的内容,所以需要在.h文件中#import "Women.h" 导入头文件.
Women *_wife; //妻子
Child *_baby; //孩子
}</span>