zoukankan      html  css  js  c++  java
  • retain\copy属性的内存管理的应用说明

    在前面
    http://www.cnblogs.com/GoGoagg/archive/2011/09/02/2163781.html
    http://www.cnblogs.com/GoGoagg/archive/2011/08/25/2152879.html
    两篇都说了下内存管理的问题,没有实践的代码。这里弄一个


    原则:
    在init函数中,使用.属性方式来为属性初始化
    在dealloc函数中,使用->成员变量方式来释放。或直接使用.属性=nil来释放。

    1、非对象类型,如int,使用属性和成员变量都无问题
    2、对象类型,如NSString ,NSDate等,如无readonly的限定,使用.属性来初始化。如果有readonly的限定,用成员变量来处理。注意,要注意类方法分配的方式。

    声明:

    @interface MyClass:NSObject
    @property (nonatomic ,retain) NSDate *RateDate;
    @property (nonatomic ,retain) NSString *Error;
    @end


    A

    @implement MyClass
    @synthesize RateDate;
    @synthesize Error;

    -(id) init
    {
    self = [super init];
    if (self) {
    self.RateDate = [NSDate date];
    self.Error = nil;
    }
    }

    -(void) dealloc
    {
    if (self.RateDate)
    [self->RateDate release];
    if (self.Error)
    [self->Error release];
    [super dealloc];
    }
    @end



    B

    @implement MyClass
    @synthesize RateDate;
    @synthesize Error;

    -(id) init
    {
    self = [super init];
    if (self) {
    self.RateDate = [NSDate date];
    self.NSString = nil;
    }
    }

    -(void) dealloc
    {
    self.RateDate = nil;
    self.Error = nil;
    [super dealloc];
    }
    @end



    C【会出现释放异常】

    @implement MyClass
    @synthesize RateDate;
    @synthesize Error;

    -(id) init
    {
    self = [super init];
    if (self) {
    self->RateDate=[NSDate date];//问题在于此类方法属于自动释放。如果要使用的话:[[NSDate alloc] init];
    self->Error = [NSString alloc] init];
    }
    }

    -(void) dealloc
    {
    if (self.RateDate)
    [self->RateDate release];
    if (self.Error)
    [self->Error release];
    [super dealloc];
    }
    @end


    个人建议:
    采用B这种方式处理

    根据实际结合AB实践方式来处理属性的内存问题


  • 相关阅读:
    浅谈GET和POST请求方式
    浅淡建立bitmap实例
    从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误
    为RichTextBox添加快捷功能菜单(复制,粘贴,全选等)
    针对解决sql server数据库中不区分大小写问题.
    <转>用C#创建可拖动窗体
    如何:对 Windows 窗体控件进行线程安全调用
    正则
    <转>反射的第二部分:Emit
    『励志』一些普通又具有深刻哲理的警句(转载)
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/2207091.html
Copyright © 2011-2022 走看看