代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

释放vs设置为nil以释放内存

  •  2
  • Dan Ray  · 技术社区  · 14 年前

    现在我要通过设置为零。我还为自己设置了一个布尔标志,以便需要这些数据的各种视图控制器可以轻松地知道如何重新加载。因此:

    DataManager *data = [DataManager sharedDataManager];
    for (Event *event in data.eventList) {
        event.image = nil;
        event.thumbnail = nil;
    }
    
    for (WondrMark *mark in data.wondrMarks) {
        mark.image = nil;
    }
    
    [DataManager sharedDataManager].cleanedMemory = YES;
    

    release 这些图片可能会用一个新的 alloc init 我什么时候再需要它们?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Noah Witherspoon    14 年前

    retain copy ,而不是 assign ,获取一个合成的访问器方法( setImage: .image = 语法转换为)在设置新值时释放旧值。所以,在这种情况下,如果你的 WondrMark 的属性声明为 保持 ,通过属性将其设置为nilvia将自动释放旧图像。如果是的话 分配 ,您需要先释放图像,然后再将属性设置为nil。

        2
  •  0
  •   mipadi    14 年前

    将对象设置为 nil ,所以是的,你应该释放他们。

        3
  •  0
  •   Chuck    14 年前

    retain 属性),则将实例变量设置为nil将导致对象释放旧值。