【问题标题】:Should I call release on these cocoa objective-c variables?我应该在这些可可objective-c变量上调用release吗?
【发布时间】:2011-02-09 09:25:15
【问题描述】:

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

NSString* 缓冲区 = [[NSString alloc] initWithData:[fileManager contentsAtPath:@"/foo"] 编码:NSUTF8StringEncoding]; NSArray* 行 = [缓冲区组件SeparatedByString:@"\n"]; NSString* line = [lines objectAtIndex:5]; // 用线做点什么 [缓冲释放];

那么上面的代码可以吗?或者我也应该在线路和线路上调用“释放”?谢谢。

【问题讨论】:

标签: objective-c cocoa


【解决方案1】:

是的行和行将被自动释放。请记住:如果您已明确执行以下任一操作,则只需 (auto)releaseallocretaincopynew。 (需要一些时间才能开始相信约定。)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 代表调用方保留?通常是错误的,除非相应地命名该方法。这种情况就是 autorelease 的用途。
    • 没有。如果您打算在函数范围之外使用引用,我的意思是保留它。 IE。将结果分配给类变量。
    • 将其返回给调用者也会使其超出函数的范围。但是,是的,分配给静态变量是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2010-11-10
    • 2014-03-20
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多