zoukankan      html  css  js  c++  java
  • OC基础第二讲

    实例变量可见度和方法

    1.实例变量可见度

    • public 对外公开,子类可以继承
    • protected 对外不公开,子类可以继承
    • private对外不公开,子类不可继承

    // 声明实例变量

        //  公有的

        @public

    NSString *_address;    //地址

    NSString *_hobby;      //兴趣

        //  受保护的,默认的

        @protected

    NSString *_name;       //姓名

    int _age;              //年龄

        // 私有的

        @private

    NSString *_sex;        //性别    

    被public修饰的实例变量可以用 ->直接访问,进行赋值取值操作:

    Person *p = [[Person alloc] init];

           p->_address = @"北京";

            p->_hobby = @"hello";

    如何在其他文件访问被protected修饰的实例变量?可以通过方法传入参数,在类的内部实现实例变量的赋值取值操作:

    方法声明如下:

    //  name添加设置值的方法

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

    //  _name添加取值的方法

    - (NSString *)getName;

    方法实现:

    //  实现设置值的方法

    -(void)setName:(NSString *)name

    {

        _name = name;

    }

    //  实现取值的方法

    -(NSString *)getName

    {

        return _name;

    }

    2.方法

    OC中方法分为两类:

    • "-"方法(实例方法):只能对象使用,eg: -(void)sayHi
    • "+"方法(类方法):只能类使用,类方法中不能使用实例变量,eg: +(id)alloc

    方法声明:

    - (void)sayHiWithName : (NSString *)name withAge : (int)age;

    这个方法有两个参数name和age,(NSString *)、 (int)分别是参数的数据类型。

    sayHiWithName,withAge是参数形容词

    方法名是参数形容词和“:”,所以该方法的方法名是sayHiWithName :withAge :       

    冒号“:”不能省略,冒号的个数与参数个数一致

    3.复合

    • oc中,实例变量由其他类型(对象类型)组成,称作复合。

    例如:创建四个类,分为为Father类,Mother类,Child类,Family类

    Family类的实例变量声明如下:

    //  声明三个实例变量

        Father *_father;        //  爸爸

        Mother *_mother;        //  妈妈

        Child *_child;          //  孩纸

    这三个实例变量不是普通数据类型,而是已经创建的三个类。

    import

    当一个文件中需要用到其他类,需要导入其类名:

    #import <Foundation/Foundation.h>

    #import "Father.h"

    #import "Mother.h"

    #import "Child.h"

     交叉导入问题:A B两个类,A类中导入了B的头文件,如果B类中也导入了A的头文件,这就叫交叉导入

    要避免交叉导入的问题,可以使用@class(前置声明),前置声明的作用是告诉编译器@class后的字符串是一个类,但其实并未导入类的接口内容。

  • 相关阅读:
    双11专刊|云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验
    LeetCode_Binary Tree Inorder Traversal
    LeetCode_4Sum
    LeetCode_Add Binary
    LeetCode_Add Two Numbers
    LeetCode_3Sum Closest
    Building CEGUI with Ogre 1.8.1
    LeetCode_3Sum
    LeetCode_Climbing Stairs
    LeetCode_Binary Tree Level Order Traversal
  • 原文地址:https://www.cnblogs.com/liuyu521/p/3690292.html
Copyright © 2011-2022 走看看