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

  • 相关阅读:
    UI-iOS开发中@property的属性weak nonatomic strong readonly等介绍
    UIView之userInteractionEnabled属性介绍
    UI-target...action设计模式,手势识别器.UIimageview
    UI-事件处理
    IOS开发—事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
    UI-事件,触摸与响应者链(一)
    第47月第11天 iOS 文件下载Download,支持断点续传、后台下载、设置下载并发数
    第47月第10天 telnet rpm包安装
    第47月第5天 openresty
    第47月第4天 arkit录制
  • 原文地址:https://www.cnblogs.com/zhaoyanjun/p/4563056.html
Copyright © 2020-2023  润新知