【问题标题】:Memory management issue: Object used after release内存管理问题:释放后使用的对象
【发布时间】:2011-01-14 10:06:03
【问题描述】:

此代码返回错误:
458:3 引用计数的对象在释放后使用

 - (id)createObjectFromURL: (NSURL*)URL
                    query: (NSDictionary*)query {
  id target = nil;

    if (self.instantiatesClass) 
  {
    target = [_targetClass alloc];
  } 

  else 
  {
    target = [_targetObject retain];
  }

  id returnValue = nil;
  if (_selector) 
  {
    returnValue = [self invoke:target withURL:URL query:query];
  } 
  else if (self.instantiatesClass) 
  {
    returnValue = [target init];
  }

  [target autorelease];
  return returnValue;
}

【问题讨论】:

    标签: iphone xcode memory-leaks memory-management


    【解决方案1】:

    如果你尝试这样做会怎样:

    else if (self.instantiatesClass) 
    {
      returnValue = [[target init] autorelease];
    }
    return returnValue;
    

    因为如果你不去 else if,你就没有初始化目标。

    【讨论】:

    • 另外,尽量多使用静态分析器。
    • 幻影;这是哪个“静态分析器”?
    • 它就像一个编译器,可以自动为您找到琐碎的错误或错别字。快捷方式是 Apple-shift-A 或 Build->Build and analyze。那么我的解决方案有效吗?
    • 我使用此“构建和分析”来生成该错误:)。有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多