方法变量需要发布吗?

时间:2011-01-07 16:21:43

标签: objective-c cocoa-touch ipad

在Objective-C中,如果我有方法

-(IBAction) didTouchSomething:(id)sender {
  NSString* test = [DataGetter read];

  if(test == nil) {
    do something
  }
}

我是否需要发布测试,或者以内存方式执行其他任何操作?或者在方法完成时自动处理?

2 个答案:

答案 0 :(得分:3)

您只需通过alloc,copy,new或retain释放您拥有的内容。检查苹果“Memory Management Programming Guide”。非常明确和乐于助人。

无论如何,您创建的指针都不需要释放。只有它可能指向的对象,但仅在上述情况下。

答案 1 :(得分:2)

原则上:

您没有调用名称中包含“copy”,“alloc”,“new”或“get”( CANG )的方法 - 所以一定不能发布test,因为您拥有它。

在实践中:

确保+[DataGetter read]返回autorelease d个对象。

示例:

+(NSString *)read
{
   NSString *result = [NSString stringWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
   return result;  // Correct: You don't own "result", so you can return it as is
}
// Alternate implementation 1:
+(NSString *)read
{
   NSString *result = [[NSString alloc] initWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
   return result; // Wrong: You own "result" since you created it!
}
// Alternate implementation 2:
+(NSString *)read
{
   NSString *result = [[NSString alloc] initWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
   return [result autorelease]; // Correct: calling autorelease ensures that result is going to be released later on.
}