zoukankan      html  css  js  c++  java
  • oc-set方法内存管理 和 @property的参数

    想一个对象中 连续两次set某个对象,会造成先set的对象 没有release,造成内存没有释放。

     1 /*
     2  内存管理代码规范:
     3  1.只要调用了alloc,必须有release(autorelease)
     4    对象不是通过alloc产生的,就不需要release
     5  
     6  2.set方法的代码规范
     7  1> 基本数据类型:直接复制
     8  - (void)setAge:(int)age
     9  { 
    10     _age = age;
    11  }
    12  
    13  2> OC对象类型
    14  - (void)setCar:(Car *)car
    15  {
    16     // 1.先判断是不是新传进来对象
    17     if ( car != _car )
    18     {
    19         // 2.对旧对象做一次release
    20         [_car release];
    21  
    22         // 3.对新对象做一次retain
    23         _car = [car retain];
    24     }
    25  }
    26  
    27  3.dealloc方法的代码规范
    28  1> 一定要[super dealloc],而且放到最后面
    29  2> 对self(当前)所拥有的其他对象做一次release
    30  - (void)dealloc
    31  {
    32     [_car release];
    33     [super dealloc];
    34  }
    35  */

    不管对象是怎么产生的,只要没有alloc,就不需要写release;例如:

    NSString *s = @"oc";

    在类的声明中使用

     1 @property (retain) Book *book; 

    就想当于告诉编译器,set方法中生成如下代码:

    1 - (void)setBook:(Book *)book
    2  {
    3       if(book != _book){
    4           [_book release];
    5          
    6           _book = [book retain];
    7      }        
    8    
    9  }    

    而不是单纯的生成

    - (void)setBook:(Book *)book
    {
        _book = book;
    } 

  • 相关阅读:
    combo参数配置_手册
    mysql服务器辅助选项
    CentOS中操作
    Linux PHP增加JSON支持及如何使用JSON
    linux服务器命令
    linux中的工具
    linux文件夹操作(及模糊搜索)
    治疗肾结石
    其他书籍
    如何定位到div滚动条的最底端
  • 原文地址:https://www.cnblogs.com/My-Cloud/p/4495946.html
Copyright © 2011-2022 走看看