在下面的代码中,我正在使用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];
上面的代码还可以吗?或者我应该在线路和线路上呼叫“释放”吗?感谢。
答案 0 :(得分:3)
是行和行将自动释放。请记住:如果您明确地执行了以下任一操作,则只需(auto)release
:alloc
,retain
,copy
,new
。 (花点时间开始信任约定。)
答案 1 :(得分:1)
你不应该释放线条或线条。除非您计划在功能范围之外使用它们。在这种情况下,你应该保留它们,然后在其他地方释放它们。