• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[好程序员训练营]Objective-C学习笔记---构造函数和析构函数 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的OC语言笔记,期待与您交流!  

 

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

 

一、构造函数

  在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了!

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap