【问题标题】:Overriding setters for assign, retain and copy用于分配、保留和复制的覆盖设置器
【发布时间】:2013-12-19 09:31:38
【问题描述】:

我是 Objective-C 的新手,想了解更多关于非基于弧的编程,尤其是覆盖赋值、保留和复制的设置器。有人可以帮帮我吗。并请简述过程。

【问题讨论】:

    标签: objective-c copy setter retain assign


    【解决方案1】:

    以下是每个的简要说明:

    assign 是默认值,只是执行变量赋值。它不声明所有权,因此如果没有其他人通过保留或其他方式声明所有权,则该属性指针指向的对象可能随时消失。

    - (void) setAssignProperty:(id)newValue
    {
        self->assignProperty = newValue;
    }
    

    retain 指定应发送新值 - 在分配时保留并发送旧值释放。保留也被称为强大。方法retain增加对象的retainCount(直到retainCount为0时才会释放对象)。

    -(void)setRetainProperty:(id)newValue
    {
        if (retainProperty != newvalue)
        {
            [retainProperty release];
            retainProperty = [newValue retain];
        }
    }
    

    copy 指定应发送新值 - 分配时复制并发送旧值释放。复制创建对象的一个​​新实例。

    -(void)setCopyProperty:(id)newValue
    {
        if (copyProperty != newvalue)
        {
            [copyProperty release];
            copyProperty = [newValue copy];
        }
    }
    

    我还想指出,几乎没有理由不使用 arc

    【讨论】:

    • 是的,我知道使用 ARC 会减少很多工作并且更干净。但我想澄清一下内存管理的概念。而且我还想知道保留和复制到底是做什么的。
    • 很好的答案,我很佩服提问者渴望了解内存管理的确切工作原理。它有助于使用 ARC 了解下面发生的情况
    • 它还有助于理解非 ARC 友好的基础对象。当新人学习 Cocoa 时,应该需要内存管理。道具:)
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2012-11-20
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多