Objective-C学习笔记---构造函数和析构函数

简介:       简单的讲,构造函数就是在创建一个对象的时候起到初始化的作用,对这个对象里的一些成员变量进行初始化,析构函数就是在对象被删除进行一些清理工作,也就是专门的扫尾工作,下面用代码来进行具体说明。
      简单的讲,构造函数就是在创建一个对象的时候起到初始化的作用,对这个对象里的一些成员变量进行初始化,析构函数就是在对象被删除进行一些清理工作,也就是专门的扫尾工作,下面用代码来进行具体说明。

 

一、构造函数

  在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];会出现错误

这是因为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了!

 

 

 

 

相关文章
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
91 2
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
机器学习/深度学习 API iOS开发
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(一)
140 0
|
存储 自然语言处理 Java
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词(二)
218 0
|
Java iOS开发
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
116 0
|
存储 安全 C语言
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
161 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(二)
【IOS 开发】Objective - C 语法 之 流程控制(二)
141 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(一)
【IOS 开发】Objective - C 语法 之 流程控制(一)
125 0