zoukankan      html  css  js  c++  java
  • 内存管理原则

    1.原则分析

    只要还有人在使用某个对象,那么这个对象就不会被回收
    只要你想用这个对象,就让对象的计数器+1
    当你不再使用这个对象时,就让对象的计数器+1
     
    2. 谁创建,谁release
    如果你通过alloc 、new 或[mutable]copy 来创建一个对象,那么你必须调用 release或autorelease
    换句话说,不是你创建的,就不用你去[auto]release
     
    3.谁retain,谁release
    只要你调用了retain,无论这个对象是如何生成,你都要调用release
     
    4.总结
    有始有终,有加就有减
    曾经让对象的计数器+1, 就必须在最后让对象计数器-1
     
    set方法的内存管理
     
    如果你有个OC对象类型的成员变量,就必须管理这个成员变量的内存。
    比如有个Book*_book
     
    1.set方法的实现
    - (void)setBook:(Book *)book
    {
    if (_book != book)
    [_book release];
    _book = [book retain];
    }
    }
     
    2. dealloc方法的实现 (不要直接调用dealloc)
     
    - (void)dealloc
    {
    [_book release];
    [super dealloc];
    }
     
    3.@property参数
    1> OC对象类型
    @property (nonatomic,retain) 类名 *属性名;
    @property (nonatomic,retain) Car *car;
    @property (nonatomic,retain) id car;
     
    2> 非OC对象类型 (int\folat\enum\struct)
    @property (nonatomic,assign) 类型名称 属性名;
    @property (nonatomic,assign) int age;
     
    4.autorelease
     
    1>系统自带的方法中,如果不包含alloc、new、copy,那么这些方法返回的对象都是已经autorelease过的
    [NSString stringWithFormat:…..];
    [NSdate date];
     
    2>开发中经常写一些类方法快速创建一个autorelease的对象
    *创建对象的时候不要直接使用类名,用self
     
    其他相关
     
    1.set方法内存管理相关的参数
    *retain:release旧值,retain新值(适用于OC对象类型)
    *assign:直接赋值(默认,适用于非0C对象类型)
    *copy   :release旧值,copy新值
     
    2.是否要生成set方法
    *readwrite:同时生成setter和getter的声明、实现
    *readonly:只会生成getter的声明、实现
     
    3.多线程管理
    *nonatomic:性能高(一般就用这个)
    *atomic:性能低(默认)
     
    4.setter和getter方法的名称
    *setter:决定了set方法的名称,一定要有个冒号 : 
    *getter:决定了get方法的名称(一般用在BOOL类型(返回BOOL类型的方法名一般以is开头))
  • 相关阅读:
    Android防止手动添加的本地库文件被NDK工具清理掉
    将驱动编译进Linux内核
    cocos2d-x入门学习笔记——Hello world分析
    linux内核开发入门学习
    makefile工程管理
    GDB程序调试工具
    ios学习笔记_20140308
    Mac Os学习笔记-下载黑屏
    时间过得好快
    做一个关于预防接种的app
  • 原文地址:https://www.cnblogs.com/qls1992/p/5248069.html
Copyright © 2011-2022 走看看