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后的字符串是一个类,但其实并未导入类的接口内容。

原文地址:https://www.cnblogs.com/liuyu521/p/3690292.html