这是分配自动发布的Objective C对象的正确方法吗?

时间:2012-02-21 10:07:48

标签: objective-c memory-management nsstring

我在这里指定一个对象是同一对象的衍生物。这有什么问题吗?

NSString *urlString =[TBXML textForElement:tempElement];
urlString = [urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
urlString = [urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"];

2 个答案:

答案 0 :(得分:2)

是的,没关系。运行此代码后,内存中将有三个NSString个对象:

  1. [TBXML textForElement:tempElement]
  2. 创建的那个
  3. [urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]
  4. 创建的那个
  5. [urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"]
  6. 创建的那个

    每个人的保留计数为1,但会自动释放。由于你没有保留对1.或2.的引用,因此你无法在之后增加其保留计数,因此在run loop的当前迭代结束时,它们将被自动释放,保留计数将变为0,并且它们将被取消分配。

    第三个是同一条船,但你确实有一个参考,所以如果你做了一些事情来增加其保留计数(例如,将其分配给strong @property或将其添加到NSArrray)然后在运行循环的迭代之后它可能继续存在。或者,如果您只是将它用作某个函数的参数(可能稍后在NSString stringWithFormat:中使用它,它将与其他两个一起被释放。

答案 1 :(得分:1)

没问题 - 没关系。

如果您编写参考计数,那么您需要注意参考,静态分析仪可以提供帮助。