我应该在这些cocoa objective-c变量上调用release吗?

时间:2010-04-18 14:40:10

标签: objective-c cocoa

在下面的代码中,我正在使用alloc创建一个新的NSString,并使用某个文件的内容对其进行初始化。因为我正在调用alloc,所以当我完成时,我知道我有责任在字符串上调用release。但是变量“lines”和“line”呢?由于方法“componentsSeparatedByString”不是以“new”或“create”开头,我可以假设“lines”会自动释放吗? “line”的相同问题,因为“objectAtIndex”也不以“new”或“create”开头。

  NSString* buffer = [[NSString alloc] initWithData:[fileManager contentsAtPath:@"/foo"]
                               encoding:NSUTF8StringEncoding];

  NSArray* lines = [buffer componentsSeparatedByString:@"\n"];
  NSString* line = [lines objectAtIndex:5];

  // do something with line

  [buffer release];

上面的代码还可以吗?或者我应该在线路和线路上呼叫“释放”吗?感谢。

2 个答案:

答案 0 :(得分:3)

是行和行将自动释放。请记住:如果您明确地执行了以下任一操作,则只需(auto)releaseallocretaincopynew。 (花点时间开始信任约定。)

答案 1 :(得分:1)

你不应该释放线条或线条。除非您计划在功能范围之外使用它们。在这种情况下,你应该保留它们,然后在其他地方释放它们。