首页 > 代码库 > OC第二节的总结

OC第二节的总结

实例变量的可见度:
@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成长中” 博客,谢绝转载!