将静态字符串分配给属性,然后稍后释放它是否安全

时间:2012-08-26 19:00:48

标签: cocoa-touch ios5 memory-management modalviewcontroller

我只是在更新我的应用程序,我发现了一些引起我注意的旧代码。我的评论通常很冗长,但我没有向自己解释为什么我这样做。

我正在呈现ModalView并更新标题和UITextField,如下所示:

addStoryItem.placeholderText = @"Foo"; //The text is always a static string.
addStoryItem.modalTitleText  = @"Bar";

在模态中,为这两个值分配属性:

@property (readwrite, assign) NSString *placeholderText;
@property (readwrite, assign) NSString *modalTitleText;

然后在模态被解雇后在模态的dealloc中释放:

[placeholderText release];
[modalTitleText  release];

这是安全/明智/好吗?我想我可能已经对avoid a retain cycle这样做了。

1 个答案:

答案 0 :(得分:3)

你违反了一些规则:

  1. 发布您拥有的内容。 (你没有自己的分配属性。你只是放弃了它,因为释放字符串文字是一个nop)
  2. 始终复制NSString属性。 (分配在这里非常危险,对象可能会消失。再次,不是文字。)
  3. 你可以通过避免保留周期来证明这一点。但由于字符串不(通常)引用其他对象,因此循环不是问题。