zoukankan      html  css  js  c++  java
  • OC-内存管理中部分.h文件和.m文件中的代码,注释很重要

    .h文件

    -----------------------------------------

    #import <Foundation/Foundation.h>

    #import "Car.h"

     

    @interface Person : NSObject

    {

        

        Car *_car;

        NSString *_name;

    }

    -(void)setName:(NSString *)name;

    -(NSString *)name;

     

    -(void)setCar:(Car *)car;

    -(Car *)car;

     

    -(void)drive;

     

    @end

     

     

    .m文件

    -----------------------------------------

    #import "Person.h"

     

    @implementation Person

    -(void)setName:(NSString *)name{

        if (_name!=name) {

            //release 旧值

            [_name release];

            //retain 新值

            _name=[name retain];

        }

    }

    -(NSString *)name{

        return _name;

    }

     

    -(void)setCar:(Car *)car{

        if (_car!=car) {//用这个是怕两次传入同一个c1,那样会照成野指针错误

            

            //c1=2->c1=1

            [_car release];//当第一次c1传进来的时候,因为之前没有任何车传入,所以_car=nil.[nil release]执行不报错,但是也无效 * //当c2传进来的时候,c1之前在main函数中已经release一次了,c1已经为1了,且当前_car就是c1,所以c2进来时候,c1(_car)release后,retainCount=0,自动调用dealloc销毁,[旧值 release]

            //c1 =2->c2=2

            _car=[car retain];//当第一次c1传进来的时候,c1=1+1=2了,* 当c2传进来的时候,c2由1变成2,退出,回到main函数

        }

    }

    -(Car *)car{

        

        return _car;

    }

     

    -(void)drive{

        

        [_car run];

        

    }

     

    //-(NSString  *)description{

    //

    //    return [NSString stringWithFormat:@"age is %d",_age];

    //}

     

    -(void)dealloc{

        //此时的已经是c2了,c2=0

        [_car release];//c2已经传进来,("此时的car"=_car),此时的_car再release一次,也销毁来

        [_name release];

        NSLog(@"Person 对象被销毁!"); //  打印4:Person 对象被销毁!

        

        [super dealloc];

    }

     

    @end

     

  • 相关阅读:
    android音乐播放器开发 SweetMusicPlayer 摇一摇换歌
    kernel logo到开机动画之间闪现黑屏(android 5.X)
    [DLX反复覆盖] hdu 3656 Fire station
    使用清华源 tensorflow 安装
    类别不平衡问题之SMOTE算法(Python imblearn极简实现)
    在Ubuntu 18.04上安装OpenCV 4(C ++和Python)
    OpenCV
    git clone速度太慢的解决办法
    OpenCV 3.4.2 环境搭建(适用于Ubuntu 一键安装)
    ubuntu16.04安装opencv3.4.1教程
  • 原文地址:https://www.cnblogs.com/wxios/p/4174988.html
Copyright © 2011-2022 走看看