0

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

我正在展示一个 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];

这是安全/明智/好吗?我想我可能这样做是为了避免保留周期

4

1 回答 1

3

你违反了几条规则:

  1. 释放你所拥有的。(你不拥有 assign 属性。你只是侥幸逃脱,因为释放字符串文字是一个 nop)
  2. 始终复制 NSString 属性。(分配在这里真的很危险,对象可能会消失。同样,不适用于文字。)

您可以通过避免保留周期来证明这一点。但是由于字符串(通常)不引用其他对象,因此循环在这里不是问题。

于 2012-08-26T19:29:15.950 回答