关于Object-c 中的构造函数与析构函数

来源:互联网 发布:秋冬搭配 知乎 编辑:程序博客网 时间:2024/04/29 02:25

今天主要记录一下我所学习的oc中的构造函数与析构函数,废话不多说了,就直接进入正题吧。
首先,oc由于是扩展的C语言,又融合了面向对象的思想,让我觉得这很像c++,但是跟c++又有所区别,我们看如下代码:

Person.m

////  Person.m//  Lesson4////  Created by Lee on 7/8/15.//  Copyright (c) 2015 Lee. All rights reserved.//#import "Person.h"@implementation Person-(id) init{    self = [super init];    if (self) {        name = @"小李";        age = 21;        ID = 20120101;        number = 123;    }    return self;}-(id) init:(NSString*)newName andAge:(int)newAge andID:(int)newID andNumber:(int)newNumber{    self = [super init];    if(self){        name = newName;        age = newAge;        ID = newID;        number = newNumber;    }    return self;}-(void) printInfo{    NSLog(@"name is %@,age is %d,ID is %d,number is %d",name,age,ID,number);}-(void) dealloc{    NSLog(@"析构函数在此调用");}-(void) setID:(int)newID{    ID = newID;}-(void) setName:(NSString*)newName{    name = newName;}-(void) setNumber:(int)newNumber{    number = newNumber;}-(void) setAge:(int)newAge{    age = newAge;}-(NSString*) getName{    return name;}-(int) getAge{    return age;}-(int) getID{    return ID;}-(int) getNumber{    return number;}+(int) getMaxAge{    return 150;}+(int) getEmergencyNumber{    return 110;}@end

首先我们定义了一个Person类,在类中我们定义了一系列的成员变量。为了保证类的封装性,特意写了一些必要的方法来操作他们,这里我们主要看initXXX开头的方法,这里的方法实际上就是oc中的构造函数,oc中定义一个构造函数形式如下:

//声明如下-(id)init;          //构造函数名为init-(id)init:(形参类别1)形参1 标签2:(形参类别2)形参2 ...; //构造函数名为 init标签2标签3...//定义如下-(id)init{    self = [super init];    if(self){    //写待初始化的代码      }}

oc中析构函数是系统自动调用的,不能直接去调用,否则将会出现错误。析构函数如下:

-(void) dealloc{    NSLog(@"析构函数在此调用");}

主函数如下:
main.m

////  main.m//  Lesson4//  this demo is about the self and super.//  Created by Lee on 7/8/15.//  Copyright (c) 2015 Lee. All rights reserved.//#import <Foundation/Foundation.h>#import"Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        // insert code here...        NSLog(@"Hello, World!");        Person *person = [Person alloc];        if ([person init]) {            [person printInfo];        }    }    return 0;}

头文件 Person.h

////  Person.h//  Lesson4////  Created by Lee on 7/8/15.//  Copyright (c) 2015 Lee. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject{@private NSString *name;@private int age;@private int ID;@private int number;}-(id) init;-(id) init:(NSString*)newName andAge:(int)newAge andID:(int)newID andNumber:(int)newNumber;-(void) setID:(int)newID;-(void) setName:(NSString*)newName;-(void) setNumber:(int)newNumber;-(void) setAge:(int)newAge;-(NSString*) getName;-(int) getAge;-(int) getID;-(int) getNumber;-(void) printInfo;+(int) getMaxAge;+(int) getEmergencyNumber;@end

运行结果如下:

0 0