OC中的方法

来源:互联网 发布:数据库前置库 编辑:程序博客网 时间:2024/05/22 09:48

实例变量的可见度:一共有三种    

@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>







0 0
原创粉丝点击