标签:interface private public 接口 可见度
实例变量的可见度:
@public:公共的,在任何文件中都可以访问,(访问方式是对象+指向操作符+实例变量,例如:per->name)
@protected:受保护的,有一定的访问权限,只允许在本类文件以及子类文件中访问,其他文件不可以访问
@private:私有的,只允许在本类文件中访问,不可以在子类文件 以及其他文件中访问
默认的可见度是@protected
为什么不声明为@public?
1.声明为@public的实例变量,外部就可以访问以及修改,会影响内部的一个实现,暴露实现细节
2.违背了OC面向对象三大特性之一---封装,(封装的思想是隐藏内部的实现,提供外接访问的接口)
为什么不声明为@private?
1.声明为@private的实例变量,子类文件访问不到,所以子类文件还需要重新定义声明
2.违背了OC面向对象三大特性之一—继承,(父类有的东西,子类都有,可访问)
@interface Person : NSObject
{
@public NSString *_name; //姓名 //将姓名这个实例变量公共化
@private NSString *_gender; //性别 //将性别这个实例变量私有化
@protected NSString *_age; //年龄 //将年龄这个实例变量保护化
}
或者
@interface Person : NSObject
{
@public //将所有的实例变量公共化
NSString *_name; //姓名
NSString *_gender; //性别
NSString *_age; //年龄
}
自定义初始化方法:
- (id)initWithXXXA:(数据类型)xxxa XXXB:(数据类型)xxxb; //在.h文件中声明
- (id)initWithXXXA:(数据类型)xxxa XXXB:(数据类型)xxxb { //在.m文件中实现
_xxxa = xxxa;
_xxxb = xxxb;
return self;
}
self 谁调用该方法,self就是代表谁
当方法是一个-号方法时,调用该方法的对象是谁,self就代表当前对象
当方法是一个+号方法,调用该方法的类是谁,self就是代表当前类
设置器 setter方法;
- (void)setXXXA:(数据类型)xxxa;
- (void)setXXXA:(数据类型)xxxa {
_xxxa = xxxa;
}
访问器 getter方法;
- (数据类型)xxxa; //在.h文件中声明
- (数据类型)xxxa { //在.m文件中实现
return _xxxa;}
文件和类没有直接关系,文件中可以存放多个类,要类符合接口部分以及实现部分的定义格式就可以了
一般情况下,一个文件就定义一个类,而且文件的名字和类的名字一样,这样就能清晰的知道该文件中的类的名字
在+号方法中不能使用实例变量,实例变量是依托与对象存在的,只有有了对象,实例变量才会有空间
(void)test {
_name; //错误的例子
}
本文出自 “IOS成长中” 博客,谢绝转载!
标签:interface private public 接口 可见度
原文地址:http://delphinidaeson.blog.51cto.com/9164110/1535733