美文网首页
GeekBand Objective-C 函数成员:方法、初始化

GeekBand Objective-C 函数成员:方法、初始化

作者: 东忙忙西茫茫 | 来源:发表于2016-05-14 23:59 被阅读0次

全局函数(C语言函数)

一般在头文件中定义,在实现文件中实现这个函数。可在任意位置去调用它。也可用OC的对象作为参数或返回值。

成员函数

1.实例方法(表达的是实例的行为)

1.1 定义:在接口头文件中定义方法,在实现类文件中去实现方法行为。

-(返回值)方法名:(参数类型)参数名;

// 接口头文件
-(void)sleep:(int)hour;
// 实现类文件
-(void)sleep:(int)hour{
    NSLog(@"%@ 休息 %d 小时",self.name, hour);
}
1.2.调用
Human* human = [[Human alloc] init];
[human sleep:3]; //[对象名 方法名]

方法内可访问的成员:实例成员(实例变量、属性、实例方法、类方法、静态变量)

2.类方法(表达的是类的行为)

+(返回值)方法名:(参数类型)参数名 对外参数名:(参数类型)参数名;

+(bool)marryToA:(Human *)a ToB:(Human *)b;
2.1.调用
[Human marryToA:tim ToB:jane]; //[类名 方法名:参数 外部参数名:参数];

类方法内访问成员:类方法、静态变量
不可访问:实例成员(实例变量、方法、属性)

注意:

OC中的所有方法默认就是Public的,没有private或prodected方法,但是可以通过扩展的方法实现类似的功能。
动态消息分发:方法的调用是通过运行时动态消息分发实现,在对象上调用方法又称“向对象发送消息”。

3.方法参数

如果参数类型是值类型,则为传值方式,如果参数类型为引用类型 则为传指针方式。
方法可以有参数,也可以没有参数。
如果方法有参数,方法名约定包含第一个参数名,从第二个参数开始需要显示提供外部参数名。

+(bool)marryToA:(Human *)a ToB:(Human *)b;

在调用时,第一个参数名是忽略,但后面的参数名会显示。

[Human marryToA:tim ToB:jane];
注意:方法名 返回值 参数类型 等都相同,但外部参数名不同,属于不同的方法。

4.动态方法调用机制

id human = [[Human alloc] init];
        [human sleep:3];

通过id引用的对象在调用属性时不可以用.的方式,但可以用访问器方法。


7266335CA11D500430A242D7B31C39C9.png

支持运行时动态加入方法。详细了解 OC的运行时机制。

5.初始化器 init

初始化器方法可以重载多个,在我们实例化对象的时候,会调用init方法,系统默认为我们的类添加init方法,它将我们的实例变量初始化为0或nil。我们也可以自定义init方法来初始化类的变量值。

5.1.定义
// 接口头文件中
-(id)initWithName:(NSString *)aName WithGender:(NSString *)aGender;

-(id)initWithName:(NSString *)aName WithGender:(NSString *)aGender WithAge:(int)aAge;
// 实现类文件中
-(id)initWithName:(NSString *)aName WithGender:(NSString *)aGender{
    return [self initWithName:aName WithGender:aGender WithAge:0];
}

-(id)initWithName:(NSString *)aName WithGender:(NSString *)aGender WithAge:(int)aAge{
    self = [super init];
    if (self) {
        _name = aName;
        _gender = aGender;
        _age = aAge;
    }
    return self;
}
注意:在初始化器中,一定要调用父类初始化器方法获取到self对象(前置调用),并判断是否获取到对象。
5.2.使用
Human* human = [[Human alloc] initWithName:@"Jane" WithGender:@"woman" WithAge:23];

实例化对象的另一种方式:

Human* human = [Human new]; // 等同于 Human* human = [[Human alloc] init];  //init 无参数版本

6.类加载器 initialize

子类的加载器会调用父类的加载器,所以如果重写这个方法,需要判断当前self的类型。

6.1.定义
// 接口头文件中
+(void)initialize;
// 实现类文件中
+(void)initialize{
    
    if (self == [Human class]) {
        ...
    }
}

注意:类被加载时被系统自动调用,每个进程周期中只会被调用一次。相当于JAVA类中的静态代码块。

6.析构器 dealloc

析构器在类中只存在一个,用于释放对象拥有的动态资源,是实例方法。一般的对象由ARC自动释放,但对于一些不受ARC管理的动态内存,如malloc分配的内存,就需要在dealloc中手动释放了。另外还有非内存资源,如果文件句柄等。
子类的构造器会调用父类的构造器(后置调用)。

6.1.定义
// 接口头文件中
-(void)dealloc;
// 实现类文件中
-(void)dealloc{
    ...
    [super dealloc];
}

相关文章

  • GeekBand Objective-C 函数成员:方法、初始化

    全局函数(C语言函数) 一般在头文件中定义,在实现文件中实现这个函数。可在任意位置去调用它。也可用OC的对象作为参...

  • Geekband Week a 一些相关概念的整理

    Geekband Week a 一些相关概念的整理 成员函数: 1.成员函数能够直接访问成员数据,为了防止成员函数...

  • 四、函数成员:方法 @GeekBand

    全局函数 成员函数 -:实例方法 self 实例对象 +:类型方法 self 类的类型 内部参数名 外部参数名 方...

  • 【GeekBand】objective-c basic1

    类与对象 数据成员 函数成员 TODO: 初始化器和析构器继承多态 类与对象 Objective-C(以下简称OC...

  • OC编程语言课程笔记(四)函数成员(极客班)

    一、类型成员之 函数成员 1、方法2、初始化器3、析构器 1、方法 1、全局函数(c语言函数,在h文件里定义,在m...

  • java构造函数

    java的构造函数又叫构造方法,函数名与类名同名,无返回值。作用:一般用来初始化成员属性和成员方法的,即new对象...

  • GeekBand-OC类型成员

    类型成员的分类 数据成员(描述对象的状态)实例变量、属性 函数成员(描述对象行为)方法、初始化器、析构器 数据成员...

  • Java中类的构造方法

    在创建对象的时候,对象成员可以由构造函数方法进行初始化。 具体用法,代码实现。 1;单个构造函数方法;’[图片上传...

  • 类成员

    类成员: 数据成员,描述对象状态 实例变量,对内部状态 属性,对外 函数成员,描述对象行为 方法 初始化器 析构器...

  • Geekband Week a 第一周作业遇到的问题

    Geekband Week a 第一周作业遇到的问题1 本周作业遇到的问题: 1.成员函数与带参内联函数的混淆:...

网友评论

      本文标题:GeekBand Objective-C 函数成员:方法、初始化

      本文链接:https://www.haomeiwen.com/subject/xncvrttx.html