• 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后面的字符串作为类名使用。并未导入类的接口内容,有效避免了嵌套循环导入


  • 相关阅读:
    TC(Total Commander)文件管理神器
    友盟 集成测试
    Channel SDK (渠道SDK) for Unity
    Prefab Assist插件
    Android资源(图片)命名规范
    FragmentTransaction的commit的异步操作
    面试2
    Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍
    Android必知必会-Android Studio修改包名
    Http标准协议Android网络框架——NoHttp
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6930285.html
Copyright © 2020-2023  润新知