OC第二课

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

一、实例变量可见度

       public(共同拥有的):实例变量能够在类的内部和外部使用

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

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

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

       演示样例:

               @interface

                       @public                                 / /共同拥有的。谁都能訪问

                        NSString  *_adress ;            / /地址

                        NSString  *_hobby ;             / /爱好

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

                       NSString  *_name ;               / /姓名

                       NSString  *_age ;                  / /年龄

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

                       NSString  *_gender ;            / /性别

               @end

        普通情况下,使用默认的受保护的 @protected

               为什么呢?由于使用@publickeyword暴漏了类内部的组件,违背了面向对象的 “ 封装 ” 特性

        以下是使用@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;

        这时就须要用到@classkeyword

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


原文地址:https://www.cnblogs.com/brucemengbm/p/6930285.html