ios c语言 析构方法,iOS中构造函数与析构函数

本文详细介绍了Objective-C中的构造函数(init)和析构函数(dealloc)的使用。构造函数用于对象初始化,包括无参数和带参数的构造方式。析构函数在对象即将销毁时自动调用,负责清理资源。在ARC环境下,析构函数的调用需要注意内存管理的规则。文章还提及了C++中构造函数和析构函数的相关概念作为对比。
摘要由CSDN通过智能技术生成

一、构造函数

在OC中凡是已init开头的函数我们都称之为构造函数,在声明构造函数的时候,不带参数的一般直接声明为“-(id)init”,带参数的一般声明为“-(id)initWith...”。

1 @interface Person:NSObject{

2 @private

3 int age;

4 NSString *name;

5 }

6 -(id)init; //不带参数的构造函数

7 -(id)initWithname:(NSString *)newname age:(int)newage; //带参数的构造函数

8

9 @end

10

11

12 @implementation Person

13

14 -(id)init{

15 self = [super init];

16 if(self){

17 name = @“xiaoming”;

18 age = 20;

19 }

20 return self;

21 }

22

23 -(id)initWithname:(NSString *)newname age:(int)newage{

24 if(self=[super init]){

25 age = newage;

26 name = newname;

27 }

28 return self;

29 }

30 int main(int argc, const char * argv[]) {

31

32 Person *p1 = [[Person alloc] init]; //对象生成后调用初始化函数

33 Person *P2 = [[Person alloc] initWithnam:(NSString *)xiaohong age:19];

34 //调用带参数的构造函数进行初始化

35 return 0;

36 }

这段代码里,在Person类中声明了,两个初始化函数,第一个带参数第二个不带参数,在对对像进行初始化的时候,带参数的初始化函数显得更为灵活,里面的初始值可以自己改动。

二、析构函数

析构函数声明为“-(void)dealloc”这个函数我们不能通过对象去人为的调用它,析构函数会在对像快要死的时候自己运行,来看代码。

1 @interface Person:NSObject{

2 @private

3 int age;

4 NSString *name;

5 }

6 -(void)dealloc; //声明析构函数,析构函数只能有一个

7 @end

8

9

10 @implementation Person //实现Person 类

11 -(void)dealloc{

12 NSLog(@"this is dealloc function");

13 [super dealloc];

14 }

15

16 @end

17

18 Person *xiaoming = [Person alloc];

19 [xiaoming release];

在代码的第六行我们声明了析构函数,并且在第11行处我们对其进行了复写,这个函数会在执行[xiaoming release];的时候运行,因为release函数就是销毁对象。

注意:有时候我们复写dealloc函数的时候加上[super dealloc];会出现错误

L3Byb3h5L2h0dHAvd3d3LmJramlhLmNvbS91cGxvYWRzL2FsbGltZy8xNTA2MDEvMTYxMjU1MjMwOC0wLnBuZw==.jpg

这是因为ARC是iOS 5推出的新功能,全称叫 ARC(Automatic ReferenceCounting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机制在iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2可以使用该机制。简单地理解ARC,就是通过指定的语法,让编译器(LLVM3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(StaticAnalyzer)工具。

解决办法:双击中间的工程名称,进入build setting

L3Byb3h5L2h0dHAvd3d3LmJramlhLmNvbS91cGxvYWRzL2FsbGltZy8xNTA2MDEvMTYxMjU1MWE4LTEucG5n.jpg

将中间的Objective-C Automatic Reference Counting改为no就OK了!

感谢大神!

(转载)C++中, 构造函数和析构函数能不能被显示调用?

(转载)http://blog.csdn.net/zhangxinrun/article/details/6056321 代码: view plaincopy to clipboardprint?#i ...

C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序

C++类的数组中构造函数和析构函数的调用顺序(2) 对于如下的代码: #include using namespace std; class CBase { priva ...

C++C++中构造函数与析构函数的调用顺序

http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...

C++中构造函数和析构函数的调用顺序

一般而言,析构函数调用的顺序和构造函数调用顺序相反,但是,对象的存储类别可以改变调用析构函数的顺序.举例说明: CreateAndDestroy类的定义 CreateAndDestroy类的成员函数的 ...

C#中构造函数和析构函数的用法

构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误.本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项.一 ...

C/C++中构造函数和析构函数能否被继承

http://bbs.csdn.net/topics/390160673 标准方面做了要求的.Even though destructors are not inherited 构造函数和析构函数是不 ...

(转)PHP中构造函数和析构函数解析

--http://www.jb51.net/article/56047.htm 构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发 ...

c++中构造函数 、析构函数的作用域详解

我们知道,在c++中,析构函数是在函数作用域尾部执行析构函数,从而释放对象,但是有一种情况下,析构函数作用域发生变化,请看下面的例子,定义了一个Stock类,Stock类存放在stock.h中,主调用 ...

C++中构造函数或析构函数定义为private

转自:http://www.blogjava.net/fhtdy2004/archive/2009/05/30/278971.html 很多情况下要求当前的程序中只有一个object.例如一个程序只有 ...

随机推荐

深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法

× 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息 ...

CSS 图片加载完成再淡入显示

一.方法 加载完成再显示:借助Image对象的onload事件,加载完时再把src赋给img标签的src: 淡人显示:起始opacity为0,利用transform过度到1 二.代码

MEF load plugin from directory

var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new DirectoryCatalog(".")); var ...

Word恢复文本转换器-修复损坏的WORD文件

第一步:找任意一个未损坏的文件打开word,新建的或者是已有的好的word文档,在文档的工具-选项-常规中,选中“打开时确认转换”复选框,并按确定. 第二步:点击word软件左上角的 文件-打开,找到 ...

repeater中后台动态为控件添加属性

在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...

【USACO 1.2.2】方块转换

[问题描述] 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺 ...

DataTable AsEnumerable 的使用

var p = DataTable.AsEnumerable().Where(t => t.Field("ChannelID") == int.Pars ...

LeetCode 53 Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

Linux安装Python2&period;7&period;9

1.下载python wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz 2.解压.编译安装 tar -zxvf Python- ...

PHP Switch 语句

PHP Switch 语句 switch 语句用于根据多个不同条件执行不同动作. PHP Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 switch 语句. 语法 switch ( ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值