iOS中构造函数与析构函数
一、构造函数
在OC中凡是已init开头的函数我们都称之为构造函数,在声明构造函数的时候,不带参数的一般直接声明为“-(id)init”,带参数的一般声明为“-(id)initWith...”。
1 @interface Person:NSObject{2 @private3 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 @private3 int age;4 NSString *name;5 }6 -(void)dealloc; //声明析构函数,析构函数只能有一个7 @end8 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];会出现错误
这是因为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
将中间的Objective-C Automatic Reference Counting改为no就OK了!
感谢大神!
iOS中构造函数与析构函数相关推荐
- php中的构造函数和析构函数,php 中构造函数和析构函数
构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...
- C++中构造函数和析构函数可以抛出异常吗?
C++中构造函数和析构函数可以抛出异常吗? 一. 析构函数 参照<Effective C++>中条款08:别让异常逃离析构函数. 总结如下: 1. 不要在析构函数中抛出异常!虽然C++ ...
- 类中构造函数、析构函数与赋值函数的重写
类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...
- C++中构造函数和析构函数
[注]致力于将知识讲明白!不懂请留言! 构造函数 定义 它是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中. 另外,一个类可以有 ...
- C++中构造函数和析构函数的调用顺序
情况一:类B继承类A 结论一:定义变量时:先调用父类的构造函数,再调用派生类的构造函数:变量销毁时:先调用派生类的析构函数,再调用父类的析构函数. #include <iostream> ...
- C++虚继承中构造函数和析构函数顺序问题以及原理
多重继承的问题:多个类B,C,-继承同一个类A导致如果X继承了B,C,-那么在X中将还有多个A中成员的拷贝,如果想要访问A中的成员如果不加名字空间将会导致二义性,这种拷贝大多是没有实际意义的,为了避免 ...
- C# 中构造函数与析构函数(二)
(二)析构函数 析构函数 · 不能在结构中定义析构函数.只能对类使用析构函数. · 一个类只能有一个析构函数. · 无法继承或重载析构函数. · 无法调用析构函数.它们是被自动调用的. · 析构函数既 ...
- C++中构造函数和析构函数常见面试题?
构造函数和析构函数常见面试题? 构造函数和析构函数常见面试题? 1.永远不要在构造函数或析构函数中调用虚函数 2.为什么构造函数不能定义为虚函数 3.为什么析构函数可以定义为虚函数 4.构造函数的执行 ...
- C++:39---继承中构造函数、析构函数的关系
一.继承中构造函数的关系 如果父类没有构造函数,则子类初始化时不需要构造父类 如果父类有构造函数,则子类初始化自己的构造函数时,要先初始化父类的构造函数 基类的构造函数必须在派生类的构造函数初始化列表 ...
最新文章
- 用python多个关键字查找_python 如何实现并行查找关键字所在的行?
- sscanf,sscanf_s及其相关用法(字符串格式化为其他类型)
- 巴斯卡三角形 and 數字位移
- PYTHON 爬虫笔记十一:Scrapy框架的基本使用
- 【JAVA基础篇】集合框架
- Helgrind:螺纹错误检测器
- [计算机网络] - IP基础知识
- 使用python原生态的min和max函数实现升序排序和降序排序
- 解码H264帧要注意的两个问题
- CSDN看不见博主博客的评论_解决办法(亲测有效奥)
- C语言用什么 IDE 好 - 除了 Visual Studio、VSCode、CLion 还有什么其他选择?
- python爬取全国真实地址_python爬虫学习之爬取全国各省市县级城市邮政编码
- 戴尔计算机恢复,DELL计算机恢复镜像问题(已解决)
- 在线DES加密解密、DES在线加密解密、DES encryption and decryption
- BIGEMAP中打开高清卫星影像谷歌地图
- 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
- C#读取srt字幕格式文件显示字幕
- pycharm——python调用dubbo接口返回句柄无效(Connection dropped:socket connection error:句柄无效)
- HTML+CSS实现背景图片铺满页面的方法
- 网络安全——DDOS攻击