OC第二课

来源:互联网 发布:河图出版社知乐 编辑:程序博客网 时间:2024/05/17 00:59

主要内容:实例变量可见度、方法

一、实例变量可见度

       public(共有的):实例变量可以在类的内部和外部使用

       protected(受保护的、默认的):实例变量只能在该类及其子类中使用

       private(私有的):实例对象只能在该类中使用

       所谓的内部是指:@interface .... @end之间

       示例:

               @interface

                       @public                                 / /共有的,谁都能访问

                        NSString  *_adress ;            / /地址

                        NSString  *_hobby ;             / /爱好

                       @protected                           / /受保护的、默认的,只能在该类及其子类中使用

                       NSString  *_name ;               / /姓名

                       NSString  *_age ;                  / /年龄

                       @private                               / /私有的只能在该类内部使用

                       NSString  *_gender ;            / /性别

               @end

        一般情况下,使用默认的受保护的 @protected

               为什么呢?因为使用@public关键字暴漏了类内部的组件,违背了面向对象的 “ 封装 ” 特性

        下面是使用@public、@protected、@private的区别


             如何在其他文件中使用protected修饰的实例变量呢?

二、方法

       OC中有两种方法:

            类方法:只能类使用,例如  +(id)alloc

                    注意:类方法中不能使用实例变量

            实例方法:只能对象使用,例如:-(void)sayHi


          方法名就是:去掉方法类型、返回值类型、参数类型、参数名和空格,剩下的就是方法名

                  例如:replaceObjectAtindex :withObject:这就是一个方法名

                  注意:1、类中不能出现相同的方法名

                             2、" : "标示参数,不能省略,有 " : "必须有参数

          赋值、取值方法

          示例:

                  - (void)setName:(NSString  *)name;

                  - (NSString  *)getName;                 

                  

                  - (void)setName:(NSString  *)name

                  {

                            _name = name;

                  }

                  - (NSString  *)getName

                  {

                            return  _name;

                  }

          不过我们一般写成这种方式(多参方式:简介、省事)

          示例:

                  - (void)setName:(NSString  *)name

                                setAge:(int)age

                            setHeight:(float)height ;

             

                  - (NSString  *)getName

                  {

                             return  _name;

                  }

                  - (int)getAge

                  {

                              return  _age;

                  }

                  - (float)getHeight 

                  {

                              return  _height;

                  }

                 注意:1、OC里面,为实例变量赋值的方法称为setter(设置器)

                            2、读取实例变量值的方法称作getter(访问器)

                            3、setter方法可以把参数写在一起(多参),但是获取方法getter必须分开写,一个参数一个getter方法

                            4、无论是setter还是getter内部操作的是实例变量,每一个实例变量都需要一对setter和getter方法

        方法的使用:

               在OC里面没有 “ student调用sayHi ” 这种表述

               正确表述:给student对象发送sayHi消息,格式: [ student  sayHi ]  

三、自定义初始化方法

       - (id)init这个初始化方法只能给实例变量设置默认值,不灵活

       - (instancetype)initWithName:自定义初始化方法,根据需求定义初始化的方法

       示例:

               - (instancetype)initWithName:(NSString   *)name

                                           initWithAge:(int)age

                                       initWithHeight:(float)height ;


               - (instancetype)initWithName:(NSString  *)name

                                           initWithAge:(int)age

                                       initWithHeight:(float)height

               {

                            _name = name;

                            _age = age;

                            _height = height;

                            return   self;

               }

       #import:导入头文件,即导入头文件中的内容到当前类

                    #import  " " :导入自定义的类

                    #import  <>:导入系统类库中的头文件

                    功能类似C语言的#include,但是可以避免头文件的重复导入

四、嵌套循环导入

        创建两个类,A继承于NSObject,B继承于NSObject

        A类有个实例变量    B  *b;

        B类有个实例变量    A  *a;

        这时就需要用到@class关键字

        @class:告诉编译器@class后面的字符串作为类名使用,并未导入类的接口内容,有效避免了嵌套循环导入


0 0
原创粉丝点击